Hibernate の非固有オブジェクト: org.hibernate.NonUniqueObjectException について
Hibernate を使用してオブジェクトを保存すると、次のエラーが発生する場合があります。 :
Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.pojo.rtrequests.User#com.pojo.rtrequests.User@d079b40b]
このエラーは、保存しようとしているオブジェクトと同じ識別子 (主キー) を持つオブジェクトがセッションにすでに含まれていることを示します。 session.clear() を使用しているにもかかわらず、問題は解決せず、なぜこの問題が発生するのか疑問に感じます。
根本原因と解決策
このエラーの根本原因は、同じ識別子を持つ 2 つの別個のオブジェクトが別個のインスタンスとして存在すること。これは通常、カスケード保存が関係する場合に発生します。この場合、オブジェクト A はオブジェクト B とカスケード保存関係を持っていますが、オブジェクト B は、オブジェクト A によって参照されるインスタンスとは別のインスタンスとしてすでにセッションに関連付けられています。
解決するにはこの問題では、使用されている主キー ジェネレーターを特定することが重要です。このエラーは、オブジェクトの永続状態を判断する Hibernate のメカニズムに関連しています。ジェネレーターがすでに永続化されているオブジェクトを永続化しようとすると、この例外が発生します。
追加の考慮事項
特定のシナリオでは、データが保存されたときにエラーがトリガーされる可能性があります。保存されているオブジェクトに関連するテーブルで削除または変更されました。たとえば、以前に削除された値を再挿入しようとすると、NonUniqueObjectException が発生する可能性があります。
デバッグのヒント
この問題をデバッグして解決するには、次の手順を実行します。次の手順を検討してください:
以上がsession.clear() を使用しているにもかかわらず org.hibernate.NonUniqueObjectException が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。