@PersistenceUnit可以与JPA中的JTA一起使用吗?如果是这样,怎么可能?
根据http://tomee.apache.org/jpa-concepts.html

使用<persistence-unit transaction-type="RESOURCE_LOCAL"> [...]

您必须使用EntityManagerFactory来获得EntityManager
[...]
只能通过@PersistenceUnit注释(而不是@PersistenceContext)注入EntityManagerFactory。

使用<persistence-unit transaction-type="JTA"> [...]

只能通过@PersistenceContext注释(而不是@PersistenceUnit)注入EntityManager。


我有一个类似的代码,它同时使用JTA和@PersistenceUnit。但是有时在进行事务处理时定义为NullPointerException(定义为@Resource)。

最佳答案

使用JTA意味着您将工作委托给了容器。您可以使用UserTransaction覆盖它。您的报价包含您想知道的所有答案。使用PersistenceUnit获取EntityManager无效。

如果使用的是RESOURCE_LOCAL,则使用EntityManager.getTransaction()负责事务本身。实体管理器由EntityManagerFactory创建。要获得该工厂,可以使用PersistenceUnit

因此,如果您依赖容器管理的实体管理器,那么简单的答案是“否”。

例如,请参见http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html

应用程序管理的实体管理器= RESOURCE_LOCAL可以使用UserTransaction(属于JTA)。

07-26 02:06