首頁  >  文章  >  Java  >  為什麼我在 Hibernate 中收到“具有相同標識符的重複對象”異常?

為什麼我在 Hibernate 中收到“具有相同標識符的重複對象”異常?

Susan Sarandon
Susan Sarandon原創
2024-10-28 22:16:02157瀏覽

 Why am I getting a

Hibernate 例外:具有相同識別符的重複物件

問題:

使用session.saveOrUpdate(e) 時與其他實體有關係的對象,可能會拋出異常,指示「具有相同標識符值的不同對像已與會話關聯。」

說明:

當Hibernate 在單一會話中偵測到具有相同識別碼的相同實體的多個實例時,會發生此異常。以下是此情況的簡化說明:

  • 實體 A (rolebean) 與實體 B (userbean) 和實體 C (groupbean) 相關。
  • 在實體 B 上呼叫 saveOrUpdate 時, Hibernate 將實體 A 儲存為實體 B 關係的一部分。
  • 稍後,當對實體 C 呼叫 saveOrUpdate 時,Hibernate 會再次嘗試儲存實體 A,但作為單獨的實例。

解決方案:

解決方案取決於所需的行為:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn