gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:51:56 25 4
gpt4 key购买 nike

在 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 文件缺少事务类型。对吗?

最佳答案

默认值

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

RESOURCE_LOCAL

<persistence-unit transaction-type="RESOURCE_LOCAL">你负责EntityManager ( PersistenceContext/Cache ) 创建和跟踪

  • 您必须使用 EntityManagerFactory获取 EntityManager
  • 结果 EntityManager实例是 PersistenceContext/Cache一个 EntityManagerFactory可以通过 @PersistenceUnit 注入(inject)仅注释(不是 @PersistenceContext)
  • 您不能使用@PersistenceContext引用 RESOURCE_LOCAL 类型的单位
  • 您必须使用 EntityTransaction每次调用您的 EntityManger 时开始/提交的 API
  • 调用entityManagerFactory.createEntityManager()两次导致两个单独的EntityManager实例,因此有两个单独的 PersistenceContexts/Caches .
  • 拥有多个 EntityManager 实例几乎从来都不是一个好主意。正在使用中(除非您已销毁第一个,否则不要创建第二个)

JTA

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

  • 您不能使用 EntityManagerFactory获取 EntityManager
  • 您只能获得 EntityManager由容器提供
  • EntityManager可以通过 @PersistenceContext 注入(inject)仅注释(不是 @PersistenceUnit)
  • 您不能使用@PersistenceUnit引用 JTA 类型的单元
  • EntityManager容器给出的是对 PersistenceContext/Cache 的引用。与 JTA 事务相关联。
  • 如果没有 JTA 事务正在进行,EntityManager无法使用,因为没有 PersistenceContext/Cache .
  • 每个拥有 EntityManager 的人在同一事务中引用同一单元将自动引用同一 PersistenceContext/Cache
  • PersistenceContext/Cache在 JTA 提交时刷新和清除

关于java - persistence.xml 不同的事务类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17331024/

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