persistence.xml不同的事务类型属性


71

在persistence.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”

我还注意到缺少事务类型的一些persistence.xml文件。这是对的吗?

Answers:


117

默认值

在JavaEE环境中,默认值为JTA;在JavaSE环境中,默认值为RESOURCE_LOCAL

RESOURCE_LOCAL

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

  • 您必须使用EntityManagerFactory来获得EntityManager
  • 结果EntityManager实例为PersistenceContext/Cache An,EntityManagerFactory只能通过@PersistenceUnit注释注入(不能通过@PersistenceContext
  • 不允许使用@PersistenceContext引用类型的单位RESOURCE_LOCAL
  • 您必须使用EntityTransactionAPI来开始/提交对您的每次调用的请求EntityManger
  • 呼唤 entityManagerFactory.createEntityManager()两次将导致两个单独的EntityManager实例,因此产生两个单独的PersistenceContexts/Caches
  • 拥有一个以上的实例几乎绝不是一个好主意。 EntityManager正在使用的(除非已销毁第否则不要创建第二个)

日本旅游协会

<persistence-unit transaction-type="JTA">容器会做EntityManagerPersistenceContext/Cache)创建和跟踪。

  • 您不能使用 EntityManagerFactory来获得EntityManager
  • 你只能得到一个 EntityManager集装箱提供的
  • 一个EntityManager可通过注射@PersistenceContext注解只有(未@PersistenceUnit
  • 您不可以使用 @PersistenceUnit引用JTA类型的单元
  • EntityManager由容器给出的到一个参考PersistenceContext/Cache与JTA事务相关联。
  • 如果没有正在进行的JTA交易,则 EntityManager因为没有所以不能使用PersistenceContext/Cache
  • EntityManager在同一笔交易中引用相同单位的每个人都将自动引用相同的PersistenceContext/Cache
  • PersistenceContext/Cache刷新和JTA清除提交时间

1
显然,您也可以在JavaSE环境中使用JTA,并且可以自己从EMF中获取EM ...例如使用独立JTA提供程序时。也许您的列表引用的是JavaSE和JavaEE,而不是JTA和RESOURCE_LOCAL
DataNucleus 2013年

3
“使用多个EntityManager实例几乎绝不是一个好主意” –这是您的意见吗?通常需要在并发应用程序中打开多个打开的EntityManager。一般来说,一个很好的答案。
塞缪尔

1
我使用RESOURCE_LOCAL无需自己开始和结束事务。我认为RESOURCE_LOCAL更像是“我想使用本地测试内存来测试此数据库”,这对于JUnit测试非常有帮助。
ha9u63ar 2015年

2
我不同意“不允许使用@PersistenceUnit引用类型为JTA的单元”的说法。我认为您可以轻松地做到这一点,并且可以使用emf.createEntityManager()方法获取实体管理器。而且,您可以使用SynchronizationType类型的参数来定义是否应立即加入当前事务,或者您在调用em.joinTransaction()方法时自行加入该事务
2015年

4
您可以看一下带有其他信息和简短示例的答案来源:tomee.apache.org/jpa-concepts.html
Radium
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.