22

UserTransactionタイトルがすべてを物語っています: aと anの違いは何EntityTransactionですか?

私の初歩的な理解はUserTransaction、JTAが必要な場合(複数のものに対してクエリを実行する場合など)にEntityTransaction使用され、JPAのみが必要な場合(クエリがアトミックな場合など)に使用されることです。

それが2つの唯一の違いですか、それともそれ以上のものがありますか?

4

1 に答える 1

28

私の初歩的な理解は、JTAが必要な場合(複数のものに対してクエリを実行する場合など)にUserTransactionが使用され、JPAのみが必要な場合(クエリがアトミックな場合など)にEntityTransactionが使用されることです。

それは基本的に正しいですが、「複数のもの」と「原子」の説明は少し奇妙です。JTA を使用すると、開発者は分散トランザクションを使用して複数のリソース (データベース、JMS ブローカーなど) をアトミックに (オール オア ナッシング) 変更できます。1 つのリソースのみにアクセスする場合 (たとえば、1 つのデータベース)、JTA は必要ありませんが、トランザクションは依然としてアトミック (全か無か) です。たとえば、1 つのデータベースで通常の JDBC トランザクションを使用する場合がこれに該当します。

UserTransaction対を考慮するEntityTransaction

  • JPA をスタンドアロンで使用する場合はEntityTransaction、自分でトランザクションを区切るために使用します。
  • JPA が JTA と統合される管理環境内で使用される場合は、UserTransaction. は、EntityManagerそれ自体を JTA 分散トランザクション マネージャーにフックします。私が知っている唯一の微妙な点は、変更のフラッシュを考慮しています。を使用するEntityTransactionと、JPA は変更をフラッシュする必要があることを認識します。を使用してトランザクションを制御する場合UserTransaction、JTA を使用してコールバックを登録する必要がありますregisterSynchronization。これにより、トランザクションが完了する前に変更がデータベースにフラッシュされます。CMT (コンテナー管理トランザクション) で EJB を使用する場合は、使用する必要さえありませんUserTransaction。アプリケーション サーバーがトランザクションを開始および停止します。

関連する質問:

于 2010-06-20T10:01:28.770 に答える