複数のEntityManagerが必要なときは?
-
24-09-2019 - |
質問
私はJPAを学んでいて、1つの質問があります:
どの状況で複数の状況が必要です EntityManager
私たちのアプリケーションで?
私が知っている2つの状況は次のとおりです。
当社のアプリケーションがマルチスレッドアプリケーションであり、複数のスレッドがJPAトランザクションが必要な場合
EntityManager
スレッドセーフではなく、必要ですEntityManager
スレッドごと。スレッドのいずれかが複数の同時トランザクションが必要な場合、複数のトランザクションが必要です
EntityManager
そのスレッドでは、1対1の関係があるためですEntityManager
とEntityTransaction
.
Q1。複数の状況が必要な場合はありますか EntityManager
?
Q2。私の理解まで、1つしかないはずです EntityManagerFactory
Persitenceユニットごと。私は正しいですか?そうでない場合は、複数の状況が必要な場合は何ですか EntityManagerFactory
持続ユニットごとに?
解決
Q1: EntityManager
「古き良き」冬眠と比較するのが最善です Session
: :作業単位(単純なビジネスアクション、「ユーザーのロギング」、「注文の配置」など)。必ずしも単一のスレッドに結び付けられているわけではありません。さまざまなスレッドが単一の作業単位内で互いに依存するDBタスクを実行する場合にのみトラブルに巻き込まれます。同期して実行する必要があります(できれば、単一のスレッドで順番に)。たとえば、ユーザーがログインしたときに「古いログ」をクリーンアップするためのビジネス要件がある場合(合理的にお互いの情報を乱しません)、単一の作業単位内の2つの別々のスレッドで完全に実行できます。
Q2:あなたの理解は正しいです。ただし、複数のものを作成できますが、意味をなさないことも利益もありません。重大なオーバーヘッドを追加するだけです。