データベースへの複数の接続でエンティティを永続化しています。永続化を処理するクラスは実行可能なインターフェイスを実装し、run() メソッドで EntityManagers を作成します。これを読んだ後、クラスコンストラクターまたは静的初期化ブロックで EntityManagerFactory を初期化する方が良いかどうかを知りたいです。
1 に答える
Java EEではなく、Java SEでJPAを使用していると仮定します。さらに、エンティティの永続化を処理するクラスがあり、クラス コンストラクターまたは静的初期化を要求しているときにこのクラスを意味すると仮定します。さらに、複数の接続はすべて同じデータベースをターゲットにしていると仮定します...そして、インスタンスを再利用しないと仮定します。EntityManager
インスタンスでも実行可能なクラスインスタンスでもありません。
仮定が正しい場合はEntityManagerFactory
、実行可能なクラスの静的初期化またはシングルトンとして実装されている 2 番目のクラスのいずれかで初期化することをお勧めします。
実行可能なクラスのクラス コンストラクターで作成するEntityManagerFactory
と、インスタンスごとに (つまり、スレッドごとに) 1 つのファクトリが作成されます。これは可能ですがEntityManagerFactory
、複数の論理同一EntityManager
インスタンスに対して 1 つしか必要ないため、不要です。
もう 1 つの問題は、EntityManager
それ自体を作成する場所です。クラス コンストラクター (初期化スレッドの早い段階でエラーをキャッチできます) またはメソッド内run
です。個人的には-メソッドの方が好きrun
です。EntityManager
try/finally
警告: 複数のスレッドにまたがるトランザクションがないことに注意してください。