Jpa @PersistenceUnit忽略transaction_new

时间:2018-05-21 17:27:38

标签: hibernate jpa transactions

应用程序管理持久性上下文是否可识别 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)  注解?或者您必须在该方法中实例化一个新的实体管理器,以便在新事务中完成数据库更改?

我有使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)注释的方法。与@PersistenceContext一起使用时,它工作正常,但与@PersistenceUnit一起使用时,方法末尾没有数据提交。

我们通过创建实体管理器工厂并稍后通过以下方式实例化EM来实现JPA的多租户:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("MeveoAdminMultiTenant", props);

...
EntityManager em = emf.createEntityManager();
        return (EntityManager) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class<?>[] { EntityManager.class }, (proxy, method, args) -> {
            currentEntityManager.joinTransaction();
            return method.invoke(currentEntityManager, args);
    });

但它完全忽略了transaction_new注释,即使它是容器管理器事务。它加入了JTA事务,因此不需要额外的事务开始/提交/回滚。

EM是使用@RequestScoped生成的。

应用程序管理的EM遵循transaction_new注释的正确方法是什么?我是否需要在该方法中获得不同的EM?

使用Hibernate 5.0.10运行Wildfly 10.1-Final

由于

0 个答案:

没有答案