質問

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

どの状況で複数の状況が必要です EntityManager 私たちのアプリケーションで?

私が知っている2つの状況は次のとおりです。

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

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


Q1。複数の状況が必要な場合はありますか EntityManager?

Q2。私の理解まで、1つしかないはずです EntityManagerFactory Persitenceユニットごと。私は正しいですか?そうでない場合は、複数の状況が必要な場合は何ですか EntityManagerFactory 持続ユニットごとに?

役に立ちましたか?

解決

Q1: EntityManager 「古き良き」冬眠と比較するのが最善です Session: :作業単位(単純なビジネスアクション、「ユーザーのロギング」、「注文の配置」など)。必ずしも単一のスレッドに結び付けられているわけではありません。さまざまなスレッドが単一の作業単位内で互いに依存するDBタスクを実行する場合にのみトラブルに巻き込まれます。同期して実行する必要があります(できれば、単一のスレッドで順番に)。たとえば、ユーザーがログインしたときに「古いログ」をクリーンアップするためのビジネス要件がある場合(合理的にお互いの情報を乱しません)、単一の作業単位内の2つの別々のスレッドで完全に実行できます。

Q2:あなたの理解は正しいです。ただし、複数のものを作成できますが、意味をなさないことも利益もありません。重大なオーバーヘッドを追加するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top