UserTransaction
タイトルがすべてを物語っています: aと anの違いは何EntityTransaction
ですか?
私の初歩的な理解はUserTransaction
、JTAが必要な場合(複数のものに対してクエリを実行する場合など)にEntityTransaction
使用され、JPAのみが必要な場合(クエリがアトミックな場合など)に使用されることです。
それが2つの唯一の違いですか、それともそれ以上のものがありますか?
UserTransaction
タイトルがすべてを物語っています: aと anの違いは何EntityTransaction
ですか?
私の初歩的な理解はUserTransaction
、JTAが必要な場合(複数のものに対してクエリを実行する場合など)にEntityTransaction
使用され、JPAのみが必要な場合(クエリがアトミックな場合など)に使用されることです。
それが2つの唯一の違いですか、それともそれ以上のものがありますか?
私の初歩的な理解は、JTAが必要な場合(複数のものに対してクエリを実行する場合など)にUserTransactionが使用され、JPAのみが必要な場合(クエリがアトミックな場合など)にEntityTransactionが使用されることです。
それは基本的に正しいですが、「複数のもの」と「原子」の説明は少し奇妙です。JTA を使用すると、開発者は分散トランザクションを使用して複数のリソース (データベース、JMS ブローカーなど) をアトミックに (オール オア ナッシング) 変更できます。1 つのリソースのみにアクセスする場合 (たとえば、1 つのデータベース)、JTA は必要ありませんが、トランザクションは依然としてアトミック (全か無か) です。たとえば、1 つのデータベースで通常の JDBC トランザクションを使用する場合がこれに該当します。
UserTransaction
対を考慮するEntityTransaction
:
EntityTransaction
、自分でトランザクションを区切るために使用します。UserTransaction
. は、EntityManager
それ自体を JTA 分散トランザクション マネージャーにフックします。私が知っている唯一の微妙な点は、変更のフラッシュを考慮しています。を使用するEntityTransaction
と、JPA は変更をフラッシュする必要があることを認識します。を使用してトランザクションを制御する場合UserTransaction
、JTA を使用してコールバックを登録する必要がありますregisterSynchronization
。これにより、トランザクションが完了する前に変更がデータベースにフラッシュされます。CMT (コンテナー管理トランザクション) で EJB を使用する場合は、使用する必要さえありませんUserTransaction
。アプリケーション サーバーがトランザクションを開始および停止します。関連する質問: