gpt4 book ai didi

java - JTA 与 PersistenceUnit

转载 作者:行者123 更新时间:2023-12-02 08:40:20 25 4
gpt4 key购买 nike

可以@PersistenceUnit在JPA中与JTA一起使用?如果是这样,怎么可能?

http://tomee.apache.org/jpa-concepts.html :

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

  • You must use the EntityManagerFactory to get an EntityManager
  • [...]
  • An EntityManagerFactory can be injected via the @PersistenceUnit annotation only (not @PersistenceContext)

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

  • An EntityManager can be injected via the @PersistenceContext annotation only (not @PersistenceUnit)

我有一个类似的代码,它使用 JTA 和 @PersistenceUnit同时。但有时我有 NullPointerException访问事务时(定义为 @Resource )。

最佳答案

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

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

所以简单的答案是否定的,如果您依赖容器管理的实体管理器。

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

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

关于java - JTA 与 PersistenceUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com