データベースでデータを永続化するために jpa を使用する Java SE プロジェクトに取り組んでいます。
現在、データベース操作ごとに新しいエンティティマネージャーを取得し、関数呼び出しが終了したら閉じます。お気に入り
public void save(T entity){
em = getNewEntity();
em.persisty(entity);
em.close;
}
しかし、多対多の関係を管理するのは非常に困難です。たとえば
、エンティティ B と多対多の関係を持つエンティティ A があります。CascadeType.MERGE があります。
A を作成したら、 B を作成し、複数のスレッドを実行して A と B の両方の情報を生成します。ただし、B が古い A を保持する場合があります。B をマージすると、A のデータは消去されます。
例えば 。A は music 、B は music album であるため、1 つの B には A リストがあります。別のスレッドが音楽メタデータを読み取り、音楽タグ情報を取得して A を更新し、新しい A が FS で見つかったときに B が更新されます。
エンティティ マネージャが閉鎖されたため、B の A リスト内のエンティティは古くなっています。つまり、A が自分自身を更新したときに、B は A が更新されたことを知りません。B をマージすると、jpa は B の A リスト内のエンティティを使用して A をマージするのに役立ちます。
この問題を解決するために、1 つのエンティティ マネージャーを使用し、すべてのデータベース操作を 1 つのスレッドに入れることにしました。すると新たな問題が出てきます。
トランザクションがアクティブであり、エンティティに対してトランザクションが開始されることになっている場合
transaction.begin();
....
transaction.end();
ただし、多くのスレッドが実行されており、それらのスレッドもエンティティを変更する可能性があります。
私の質問は: Java SE 開発で jpa を使用する方法?. ありがとう