「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Hibernate アプリケーションで「org.hibernate.NonUniqueObjectException」が発生するのはなぜですか?

Hibernate アプリケーションで「org.hibernate.NonUniqueObjectException」が発生するのはなぜですか?

2024 年 11 月 12 日に公開
ブラウズ:667

Why Am I Getting a

Hibernate エラーの調査: "org.hibernate.NonUniqueObjectException"

Hibernate のときに発生するエラー「org.hibernate.NonUniqueObjectException」同じセッションに関連付けられた同一の識別子を持つ 2 つの異なるオブジェクトに遭遇します。この矛盾は、多くの場合、コード内のより深い問題を示しています。

提供されたコード スニペットから、2 つの User オブジェクト、userObj1 と userObj2 が、rtsession.save() を使用してセッションに保存されているようです。ただし、Hibernate は、指定されたユーザー オブジェクトがすでにセッションに関連付けられていると見なすため、この操作を拒否します。

このエラーは通常、次の 2 つの理由のいずれかで発生します:

  1. ]間違ったカスケード オブジェクト: オブジェクト A とオブジェクト B の間にカスケード関係が定義されている場合、オブジェクト B が以前にセッションに関連付けられていたが、オブジェクト A によって参照されているインスタンスと同じインスタンスではない場合、このエラーが発生する可能性があります。 .
  2. 主キー ジェネレーターの問題: このエラーは、使用されている主キー ジェネレーターに関連している可能性もあります。 Hibernate がすでに永続化されているオブジェクトを永続化しようとすると、この競合により「NonUniqueObjectException」がトリガーされる可能性があります。

この問題を解決するには、コードを注意深く調べてオブジェクトの重複箇所を特定することをお勧めします。が発生します。コードを分解し、エラーが消えるまで特定のセクションをコメントアウトし、エラーが再発するまで徐々にコードを元に戻すと、原因を特定するのに役立ちます。さらに、主キー ジェネレーターを確認し、オブジェクトの関連付けが適切であることを確認すると、この問題の解決に役立ちます。

さらに、次のトラブルシューティングのヒントを考慮してください。

  • 最近更新または削除したかどうかを確認してください。リレーションシップの一部であるテーブル内の値。
  • 前の更新または削除操作を実行した後に同じオブジェクトを再度挿入しようとしているかどうかを確認してください。
  • Hibernate の detach() メソッドを使用します。 saveOrUpdate() で再アタッチする前に、セッションからオブジェクトを削除します。
  • 他のすべてが失敗した場合は、詳細なガイダンスとエラー処理戦略について Hibernate のドキュメントを参照してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3