この構成には基本的にいくつかのオブジェクトがあります(実際のデータモデルは少し複雑です)。
- AはBと多対多の関係にあります(Bは
inverse="true"
) - BはCと多対1の関係にあります(私はに
cascade
設定しました"save-update"
) - Cは、タイプ/カテゴリテーブルの一種です。
また、保存時にデータベースによって主キーが生成されることにも言及する必要があります。
私のデータでは、Aに一連の異なるBオブジェクトがあり、これらのBオブジェクトが同じCオブジェクトを参照している場合に問題が発生することがあります。
を呼び出すとsession.saveOrUpdate(myAObject)
、休止エラーが表示されます"a different object with the same identifier value was already associated with the session: C"
。hibernateは同じセッションで同じオブジェクトを2回挿入/更新/削除できないことを知っていますが、これを回避する方法はありますか?これは、それほど珍しい状況ではないようです。
この問題の調査中に、人々がの使用を提案するのを見てきましたがsession.merge()
、その場合、「競合する」オブジェクトはすべての値がnullに設定された空白のオブジェクトとしてデータベースに挿入されます。明らかにそれは私たちが望んでいることではありません。
[編集]言及し忘れたことのもう1つは、(私の制御の及ばないアーキテクチャ上の理由から)読み取りまたは書き込みをそれぞれ別のセッションで行う必要があることです。