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”
?
また、transaction-typeが欠落している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
へのすべての呼び出しを開始/コミットするには、EntityManger
APIを使用する必要がありますentityManagerFactory.createEntityManager()
を2回呼び出すと、2つの別個のEntityManager
インスタンスが生成され、そのため2つの別個のPersistenceContexts/Caches
が生成されます。EntityManager
の複数のインスタンスを使用することは、ほとんど決して良い考えではありません(最初のインスタンスを破棄しない限り、2番目のインスタンスを作成しないでください)<persistence-unit transaction-type="JTA">
を使用すると、コンテナはEntityManager
(PersistenceContext/Cache
)の作成と追跡を行います。
EntityManagerFactory
を使用してEntityManager
を取得することはできませんEntityManager
のみを取得できますEntityManager
は、@PersistenceContext
注釈のみを使用して注入できます(@PersistenceUnit
は不可)@PersistenceUnit
を使用することはできませんEntityManager
は、JTAトランザクションに関連付けられたPersistenceContext/Cache
への参照です。PersistenceContext/Cache
がないため、EntityManager
は使用できません。EntityManager
参照を持つすべてのユーザーは、自動的に同じPersistenceContext/Cache
への参照を持ちます。PersistenceContext/Cache
はJTAコミット時にフラッシュされクリアされます