1. ホーム
  2. ハイバーネート

同じ識別子値を持つ別のオブジェクトがすでにセッションと関連付けられていました。

2022-02-08 08:32:24
[DH-OFFICE] 2013-06-16 23:50:30 ERROR [http-8080-5] NewsAction.save(128) | a different object with the same identifier value was already associated with the session: [com.sencloud.dh.oa.model.info.News#10060]; nested exception is org.hibernate. with the same identifier value was already associated with the session: [com.sencloud.dh.oa.model.info.News#10060]; nested exception is org.hibernate.









今日、この問題にぶつかったんだ。それは次のように解決することができます。

1. 同じ識別子値を持つ別のオブジェクトが、すでにセッションと関連付けられていた。
  エラーの理由 hibernate の同じセッション内に、2 つの同じ識別子と異なるエンティティが存在します。
  解決策1:session.clean()
  PS: クリーン操作の後に、データの状態を変更する saveOrUpdate(object) のような操作を行うと、 "Found two representations of the same collection" 例外が報告される可能性があります。
  解決策2:session.refresh(object)
  PS: オブジェクトがデータベース内の既存データのオブジェクトでない場合、session.refresh(object)は使用できません。このメソッドはhibernateセッションからオブジェクトを取得するため、セッションにオブジェクトがない場合はエラーを報告するので、saveOrUpdate( object) を使う場合も事前に判断しておく必要があります。
  解決策3:session.merge(object)
  追記:Hibernateは内部に独自のメソッドを持っているので、それを使うことをお勧めします。
2、同じコレクションの2つの表現が見つかった
  エラーの理由 1を参照してください。
  解決策:session.merge(object)
上記の2つの例外は、1対多のマッピングや多対多のマッピングでよく見られるものです。