JPAがエンティティの追加/更新を処理する方法と少し混乱しています。
ATM、私はこのコードを持っています:
AltContact c = new AltContact("test");
save(c)
System.out.println("ENTITY: " + contains(c));
c.setEnterpriseName("test2");
save(c);
System.out.println("ENTITY: " + contains(c));
saveメソッドは、EntityManagerでのマージを要求するアプリケーションのサーバー側の単純なメソッドです。
public void save (Object e) {
em.merge(e);
em.flush();
}
ここで、 emはのインスタンスですEntityManager
。
containsは、サーバー側のメソッドであり、特定のエンティティが現在の永続コンテキストに存在するかどうかをエンティティマネージャーに問い合わせます。
上記のコードは、テーブルに2つの行を作成します。最初の行の値は「test」で、もう1つの行の値は「test2」です。これは私が望むものではありません。
値が「test」の新しい行を作成し、行の作成直後にそれを更新して、値を「test2」に設定したいと思います。保存するための両方の呼び出しが2回返された後、containsの戻り値を印刷しました。false
問題は、保存を最初に呼び出した後、エンティティが永続コンテキストの一部ではないという事実に起因していると思います。そのため、もう一度saveを呼び出すと、エンティティマネージャーはそれを新しいエンティティと見なして新しい行を作成します。
この更新プロセスをどのように達成できますか?