当前位置: 首页 > 知识库问答 >
问题:

@PostConstruct中没有可用的事务性实体管理器

弘兴言
2023-03-14

问题:entityManager.unwrap(SessionImplementor.class)原因没有可用的事务性entityManager异常。

代码:

@Component
public class HibernateEventWiring {

    @Autowired
    private ViewListener listener;

    @PersistenceContext(unitName = "config-punit")
    private EntityManager entityManager;

    @PostConstruct
    public void registerListeners() {
        SessionFactory sessionFactory = getSessionFactory();
        EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry().getService(
                EventListenerRegistry.class);
        registry.getEventListenerGroup(EventType.PRE_UPDATE).appendListener(listener);
    }

    @Transactional
    private SessionFactory getSessionFactory() {
        // EXCEPTION: No transactional entitymanager available
        return entityManager.unwrap(SessionImplementor.class).getFactory(); 
    }
}

共有1个答案

华项明
2023-03-14

根据这个出色的答案:

在@PostConstruct中(与来自InitializingBean接口的AfterPropertieSet一样),无法确保所有的后处理都已经完成,因此(实际上)不可能有任何事务。

如我所见,您不需要事务也不需要实体管理器bean,而是需要实体管理器工厂bean。我认为您应该简单地自动连接EntityManagerFactory,然后从中打开Hibernate SessionFactory。

@Autowired
private EntityManagerFactory entityManagerFactory;

@PostConstruct
public void registerListeners() {
    SessionFactory sessionFactory = entityManagerFactory.unwrap(SessionFactory.class);
    ...
}
 类似资料:
  • 问题内容: 问题: 导致异常。 码: 问题答案: 根据这个出色的答案: 在@PostConstruct中(与InitializingBean接口中的afterPropertiesSet一样),无法确保已完成所有后期处理,因此(实际上)不能有任何事务。 如我所见,您不需要事务也不需要实体管理器bean,而是需要实体管理器工厂bean。我认为您应该简单地自动连接EntityManagerFactory

  • 我试图从注入的EntityManager中打开Hibernate会话,因为我需要使用Hibernate的原生标准API。 当我尝试使用标准时,我得到以下异常: 但是,当我使用EntityManager本身的Query api时,一切都很好。 我的配置: db.xml PouzivatelDAOHibernate 不起作用: PouzivatelDAOHibernate,它确实工作: 编辑:我在JP

  • 我试图使用spring boot将EntityManager注释注入到我的DAO中,但是得到一个< code > InvalidDataAccessApiUsageException 消息,说没有可用的事务EntityManager。我的印象是,只要Spring Boot从< code>application.yml中获得了我的数据源信息,并且我用< code>@PersitenceContext

  • 我正在使用Spring boot 1.2.3。JPA的发布版本超过Hibernate。我遇到以下异常 以下是我的程序结构 配置类 在上面的服务类代码中,有人能指导我为什么2个工作和1个抛出异常。 谢啦

  • 我正在使用Spring的事务支持和JPA(Hibernate)来持久化我的实体。一切正常,但我在处理一个请求中的部分更新时陷入困境: 对于每个用户(HTTP)请求,我必须将一个日志条目写入数据库表,即使“主”业务实体的更新失败(例如,由于验证错误)。因此,我的第一个/主要事务get被回滚,但第二个(写日志)应该提交。这似乎可以使用正确的传播级别来写入日志条目: 然而,我的问题是,我在第二个事务中注

  • 在我的实际应用程序中,我有一个业务层,它根据一些业务规则使用JPA来持久化数据,问题是camel JPA事务没有与业务层事务共享。我需要业务类中的EntityManager与Camel事务范围集成,我该怎么做? 下面是一个简单的例子,但这反映了实际设计中的问题。 项目实例 服务级别 骆驼路线 骆驼背景。xml