19

私はJPAを学んでいて、1つの質問があります:

EntityManagerアプリケーションで複数必要になるのはどのような状況ですか?

私が認識している2つの状況は次のとおりです。

  • アプリケーションがマルチスレッド アプリケーションであり、複数のスレッドが JPA トランザクションEntityManagerを必要とする場合、スレッドセーフではなく、スレッドEntityManagerごとに 1 つ必要です。

  • いずれかのスレッドが複数の同時トランザクションを必要とする場合、と の間にEntityManagerは 1 対 1 の関係があるため、そのスレッドには複数のトランザクションが必要です。EntityManagerEntityTransaction


Q1. 複数が必要な状況は他にありますEntityManagerか?

Q2. EntityManagerFactory私の理解では、 Persitence Unit ごとに 1 つだけ存在するはずです。私は正しいですか?EntityManagerFactoryそうでない場合、 Persistence Unit ごとに複数必要な状況はどのようなものですか?

4

1 に答える 1

12

Q1: EntityManager「古き良き」Hibernate と比較するのが最適ですSession: 作業単位 (「ユーザーのログイン」、「注文」などの単純なビジネス アクション)。必ずしも単一のスレッドに結び付けられているわけではありません。異なるスレッドが単一の作業単位内で相互に依存する DB タスクを実行する場合にのみ、問題が発生します。それらを同期して実行する必要があります(できれば、単一のスレッドで順番に)。たとえば、ユーザーのログイン時にいくつかの「古いログ」をクリーンアップするというビジネス要件がある場合 (これにより、互いの情報が妨げられることはありません)、単一の作業単位内の 2 つの個別のスレッドで完全に実行できます。

Q2: あなたの理解は正しいです。ただし、複数作成することはできますが、それは意味がなく、メリットもありません。かなりのオーバーヘッドが追加されるだけです。

于 2010-04-06T16:55:40.837 に答える