应用程序管理持久性上下文是否可识别 @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
由于