1. ホーム
  2. java

persistence.xml 異なるトランザクションタイプの属性

2023-09-02 22:36:50

質問

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ファイルでは、transaction-typeが欠落していることに気づきました。これは正しいのでしょうか?

どのように解決するのですか?

既定値

デフォルトは JTA に、JavaEE 環境では RESOURCE_LOCAL に変更します。

リソース_ローカル

<persistence-unit transaction-type="RESOURCE_LOCAL"> を担当します。 EntityManager ( PersistenceContext/Cache ) の作成と追跡

  • を使用する必要があります。 EntityManagerFactory を取得するために EntityManager
  • その結果 EntityManager のインスタンスは PersistenceContext/Cache An EntityManagerFactory を注入することができます。 @PersistenceUnit アノテーションのみを使用します (ただし @PersistenceContext )
  • を使用することはできません。 @PersistenceContext 型のユニットを参照するために RESOURCE_LOCAL
  • を使用する必要があります。 EntityTransaction を呼び出すたびに、開始/コミットするための API を使用しなければなりません。 EntityManger
  • 呼び出し entityManagerFactory.createEntityManager() を2回呼ぶと、2つの別々の EntityManager インスタンスが生成され、その結果、2つの別々の PersistenceContexts/Caches .
  • のインスタンスが2つ以上あることは、ほとんど良いアイデアではありません。 EntityManager のインスタンスを複数持つことは、良いことではありません(最初のインスタンスを破棄しない限り、2つ目のインスタンスは作成しないでください)。

JTA

<persistence-unit transaction-type="JTA"> とすると、コンテナは EntityManager ( PersistenceContext/Cache ) を作成し、追跡します。

  • を使用することはできません。 EntityManagerFactory を取得するために EntityManager
  • を取得できるのは EntityManager がコンテナから供給される
  • には EntityManager を介して注入することができます。 @PersistenceContext アノテーションのみを使用します (ただし @PersistenceUnit )
  • を使用することはできません。 @PersistenceUnit を使用して、JTA タイプのユニットを参照することはできません。
  • EntityManager コンテナによって与えられた参照は PersistenceContext/Cache JTA Transaction に関連付けられたものです。
  • JTA トランザクションが進行中でない場合は EntityManager が存在しないため、使用することはできません。 PersistenceContext/Cache .
  • を持つ誰もが EntityManager への参照を持つ誰もが、自動的に同じトランザクションの同じユニットへの PersistenceContext/Cache
  • PersistenceContext/Cache はJTAのコミット時にフラッシュされクリアされます。