0

データベースへの複数の接続でエンティティを永続化しています。永続化を処理するクラスは実行可能なインターフェイスを実装し、run() メソッドで EntityManagers を作成します。これを読んだ後、クラスコンストラクターまたは静的初期化ブロックで EntityManagerFactory を初期化する方が良いかどうかを知りたいです。

4

1 に答える 1

1

Java EEではなく、Java SEでJPAを使用していると仮定します。さらに、エンティティの永続化を処理するクラスがあり、クラス コンストラクターまたは静的初期化を要求しているときにこのクラスを意味すると仮定します。さらに、複数の接続はすべて同じデータベースをターゲットにしていると仮定します...そして、インスタンスを再利用しないと仮定します。EntityManagerインスタンスでも実行可能なクラスインスタンスでもありません。

仮定が正しい場合はEntityManagerFactory、実行可能なクラスの静的初期化またはシングルトンとして実装されている 2 番目のクラスのいずれかで初期化することをお勧めします。

実行可能なクラスのクラス コンストラクターで作成するEntityManagerFactoryと、インスタンスごとに (つまり、スレッドごとに) 1 つのファクトリが作成されます。これは可能ですがEntityManagerFactory、複数の論理同一EntityManagerインスタンスに対して 1 つしか必要ないため、不要です。

もう 1 つの問題は、EntityManagerそれ自体を作成する場所です。クラス コンストラクター (初期化スレッドの早い段階でエラーをキャッチできます) またはメソッド内runです。個人的には-メソッドの方が好きrunです。EntityManagertry/finally

警告: 複数のスレッドにまたがるトランザクションがないことに注意してください。

于 2013-02-28T07:02:09.967 に答える