簡體   English   中英

persistence.xml 不同的事務類型屬性

[英]persistence.xml different transaction-type attributes

在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

資源_本地

使用<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實例幾乎從來都不是一個好主意(不要創建第二個實例,除非您已經銷毀了第一個實例)

JTA

使用<persistence-unit transaction-type="JTA">容器將執行EntityManager ( PersistenceContext/Cache ) 創建和跟蹤。

  • 您不能使用EntityManagerFactory來獲取EntityManager
  • 您只能獲得容器提供的EntityManager
  • EntityManager只能通過@PersistenceContext注釋注入(不是@PersistenceUnit
  • 不允許使用@PersistenceUnit來引用 JTA 類型的單元
  • 容器提供的EntityManager是對與 JTA 事務關聯的PersistenceContext/Cache的引用。
  • 如果沒有正在進行的 JTA 事務,則無法使用EntityManager因為沒有PersistenceContext/Cache
  • 每個在同一事務中擁有對同一單元的EntityManager引用的人都會自動擁有對同一PersistenceContext/Cache的引用
  • PersistenceContext/Cache在 JTA 提交時被刷新和清除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM