エンティティの削除を試みるために Hibernate 4、Struts2 を使用していますが、次の例外がスローされました。
org.hibernate.NonUniqueObjectException: a different object With the same identifier value was Already Associated With the session
私は読んでいて、問題を理解していると思っていました。実際、例外は非常に説明的です。セッションに同じ識別子を持つ複数のオブジェクトがあり、これは問題でした。これは、Hibernate が特定のサブジェクトでトランザクションを実行し、ある時点で 2 つのオブジェクトからの情報が一致しなくなるためです。休止状態は、「セッションにこの ID のオブジェクトがありますが、私があなたに与えたオブジェクトではありません」と言っていると思います。
私は自分のコードをチェックして問題を理解しましたが、削除しようとする直前にオブジェクトを取得すると問題が解決するという記事を読みました。なぜそれが問題を解決するのか理解できないので、例外の理由を理解していないと思います。
session.get(...) は以前に抽出したオブジェクトを返すと思いますが、よくわかりません。
メソッドは次のとおりです。
public void eliminarElemento(Elemento elemento) {
try {
session.beginTransaction();
//Elemento elementoPersistido = (Elemento) session.get(Elemento.class, elemento.getId());
session.delete(elemento);
session.getTransaction().commit();
} catch (HibernateException he) {
he.printStackTrace();
session.getTransaction().rollback();
throw he;
}
}
行のコメントを外して、Session.get (...) を返すオブジェクトを削除しようとすると、例外は発生しなくなりました。なんで?ありがとう。