在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文件。这是对的吗?
答案 0 :(得分:106)
在JavaEE环境中默认为 JTA ,在JavaSE环境中默认为 RESOURCE_LOCAL 。
使用<persistence-unit transaction-type="RESOURCE_LOCAL">
,您有责任EntityManager
(PersistenceContext/Cache
)创建和跟踪
EntityManagerFactory
获取EntityManager
EntityManager
个实例是PersistenceContext/Cache
EntityManagerFactory
只能通过@PersistenceUnit
注释注入(@PersistenceContext
)@PersistenceContext
来引用RESOURCE_LOCAL
类型的单位EntityTransaction
API开始/提交每次调用EntityManger
entityManagerFactory.createEntityManager()
两次会产生两个单独的EntityManager
个实例,因此会有两个单独的PersistenceContexts/Caches
。EntityManager
的多个实例几乎不是一个好主意(除非你销毁了第一个实例,否则不要创建第二个实例)使用<persistence-unit transaction-type="JTA">
容器将EntityManager
(PersistenceContext/Cache
)创建和跟踪。
EntityManagerFactory
获取EntityManager
EntityManager
EntityManager
只能通过@PersistenceContext
注释注入(不是@PersistenceUnit
)@PersistenceUnit
来引用JTA类型的单位EntityManager
是对与JTA交易相关联的PersistenceContext/Cache
的引用。EntityManager
,因为没有PersistenceContext/Cache
。EntityManager
引用的每个人都会自动引用相同的PersistenceContext/Cache
PersistenceContext/Cache