持久性.xml不同的事务类型属性

2022-08-31 12:53:54

在持久性.xml JPA 配置文件中,可以有如下行:

<persistence-unit name="com.nz_war_1.0-SNAPSHOTPU" transaction-type="JTA">

或有时:

<persistence-unit name="com.nz_war_1.0-SNAPSHOTPU" transaction-type=”RESOURCE_LOCAL”>

我的问题是:

和 有什么区别?transaction-type="JTA"transaction-type=”RESOURCE_LOCAL”

我还注意到一些持久性.xml缺少事务类型的文件。这是正确的吗?


答案 1

违约

缺省于 JavaEE 环境中的 JTAJavaSE 环境中的RESOURCE_LOCAL

RESOURCE_LOCAL

与您一起负责()创建和跟踪<persistence-unit transaction-type="RESOURCE_LOCAL">EntityManagerPersistenceContext/Cache

  • 您必须使用 来获取EntityManagerFactoryEntityManager
  • 生成的实例是只能通过注释注入的 An(不是EntityManagerPersistenceContext/CacheEntityManagerFactory@PersistenceUnit@PersistenceContext)
  • 不允许 使用 来引用类型的单位@PersistenceContextRESOURCE_LOCAL
  • 您必须使用 API 在每次调用您的EntityTransactionEntityManger
  • 调用两次会导致两个单独的实例,从而产生两个单独的 。entityManagerFactory.createEntityManager()EntityManagerPersistenceContexts/Caches
  • 使用多个实例几乎从来都不是一个好主意(除非您销毁了第一个实例,否则不要创建第二个实例)EntityManager

日本电信协会

使用容器将执行()创建和跟踪。<persistence-unit transaction-type="JTA">EntityManagerPersistenceContext/Cache

  • 您不能使用 来获取EntityManagerFactoryEntityManager
  • 您只能获得容器提供的EntityManager
  • 只能通过注释注入 A(不EntityManager@PersistenceContext@PersistenceUnit)
  • 不允许使用来引用 JTA 类型的单位@PersistenceUnit
  • 容器给出的是对与 JTA 事务关联的引用。EntityManagerPersistenceContext/Cache
  • 如果没有正在进行的 JTA 事务,则无法使用 ,因为没有 。EntityManagerPersistenceContext/Cache
  • 在同一事务中引用同一单位的每个人都将自动引用同一单位EntityManagerPersistenceContext/Cache
  • 在 JTA 提交时刷新并清除PersistenceContext/Cache

答案 2

推荐