myHibernate の多対多マッピングで「同じ識別子の値を持つ別のオブジェクトがすでにセッションに関連付けられています」というエラーが発生するのはなぜですか?

DDD
リリース: 2024-10-28 16:18:14
オリジナル
328 人が閲覧しました

 Why am I getting

多対多マッピングでの Hibernate の異なる識別子エラー

エラー「同じ識別子の値を持つ別のオブジェクトが既に関連付けられていました。」 「セッション」は、Hibernate がセッション内にすでに存在するオブジェクトを保存しようとすると発生します。この場合、UserBean、GroupBean、RoleBean クラスに関係する多対多のマッピングに関連しているようです。

提供されたコードでは、saveOrUpdate メソッドが保存機能。 saveOrUpdate はオブジェクトの保存と更新の両方を試行しますが、この場合、重複した rolebean#1 オブジェクトが発生します。

エラーは 2 つの解決策を示唆しています。

  • Use session.merge( e) session.saveOrUpdate(e) の代わり: このメソッドは、分離されたオブジェクトを永続オブジェクトとマージし、識別子の競合を回避します。ただし、既存のデータが上書きされる可能性もあります。
  • 重複した rolebean#1 オブジェクトの原因を特定します。ロール Bean がユーザーとグループの両方に割り当てられているコードを検査し、問題があるかどうかを判断します。インスタンスの作成または割り当て方法に問題があります。

例外メッセージは、rolebean#1 オブジェクトがセッション内で 2 回保存されたことを示します。これは、同じオブジェクトが複数のコレクションに割り当てられている場合に発生する可能性があります。

Hibernate の動作を理解し、オブジェクトが割り当てられているコードを調べることで、問題を解決し、次のことを確実に行うことができます。オブジェクトは保存され、セッション内で正しく関連付けられます。

以上がmyHibernate の多対多マッピングで「同じ識別子の値を持つ別のオブジェクトがすでにセッションに関連付けられています」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート