ホームページ >Java >&#&チュートリアル >Hibernate で「同じ識別子を持つオブジェクトの重複」例外が発生するのはなぜですか?
問題:
session.saveOrUpdate(e) を使用する場合他のエンティティとの関係があるオブジェクトの場合、「同じ識別子の値を持つ別のオブジェクトがすでにセッションに関連付けられている」ことを示す例外がスローされる場合があります。
説明:
この例外は、Hibernate が単一セッション内で同じ識別子を持つ同じエンティティの複数のインスタンスを検出した場合に発生します。この状況を簡略化して示します。
解決策:
解決策は、目的の動作によって異なります:
1.マージによる関係の維持:
インスタンスの重複を防ぐには、saveOrUpdate の代わりに session.merge(e) を使用します。 Merge は、エンティティのデタッチされたインスタンス (この場合はエンティティ A) がセッションにアタッチされ、すべての変更がアタッチされたバージョンにマージされる必要があることを前提としています。
2.割り当ての一貫性を確保する:
saveOrUpdate の使用を継続する場合は、エンティティの同じインスタンスが関連するすべてのエンティティに割り当てられていることを確認してください。これは、エンティティ A をエンティティ B とエンティティ C の関係に追加する場合、エンティティ A の同じインスタンスを使用する必要があることを意味します。
例:
<code class="java">// Ensuring the same instance of rolebean is assigned to both userbean and groupbean rolebean.setUserbean(userbean); groupbean.getGroups().add(rolebean);</code>
注:
特定の修正は、割り当てを実行するコードによって異なります。オブジェクトの重複の問題を回避するには、リレーションシップを確立するときにエンティティの同じインスタンスが使用されていることを確認することが重要です。
以上がHibernate で「同じ識別子を持つオブジェクトの重複」例外が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。