問題:
使用session.saveOrUpdate(e) 時與其他實體有關係的對象,可能會拋出異常,指示「具有相同標識符值的不同對像已與會話關聯。」
說明:
當Hibernate 在單一會話中偵測到具有相同識別碼的相同實體的多個實例時,會發生此異常。以下是此情況的簡化說明:
解決方案:
解決方案取決於所需的行為:
1.透過合併維護關係:
為了防止重複實例,請使用session.merge(e) 而不是saveOrUpdate。合併假設實體的分離實例(在本例中為實體 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中文網其他相關文章!