[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
質問
私は基本的にこの構成でいくつかのオブジェクトを持っています(実際のデータモデルはもう少し複雑です)。
-
AはBと多対多の関係(Bは
inverse="true"
) -
BはCと多対一の関係にある(私は
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に設定された空白のオブジェクトとしてデータベースに挿入されます。これは明らかに、私たちが望んでいるものではありません。
[編集] もうひとつ言い忘れたのは、(私の手に負えないアーキテクチャ上の理由で)読み取りや書き込みはそれぞれ別のセッションで行う必要があるということです。
解決方法は?
おそらく、Bオブジェクトが同じJava Cオブジェクトのインスタンスを参照していないことが原因でしょう。それらはデータベースの同じ行(すなわち同じ主キー)を参照していますが、そのコピーは異なっています。
つまり、エンティティを管理しているHibernateセッションは、同じ主キーを持つ行に対応するJavaオブジェクトを追跡していることになります。
1つのオプションは、同じ行を参照するオブジェクトBのエンティティが、実際にはCの同じオブジェクトインスタンスを参照していることを確認することです。この方法では、Bが永続化されたとき、Cは永続化されません。ただし、Cを別途手動で保存する必要があります。Cがタイプ/カテゴリ・テーブルである場合、おそらくそのようにすることが理にかなっています。
関連
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】なぜjava.io.Fileにはcloseメソッドがないのでしょうか?
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】予期しない型エラー
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)
-
[解決済み] Hibernateの「オブジェクトは保存されていないトランジェントインスタンスを参照しています - フラッシュする前にトランジェントインスタンスを保存してください」エラーの修正方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】エラー「No enclosing instance of type Foo is accessible」の原因と修正方法について教えてください。
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】破損したjarファイル
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】Javaの".class expected "について