Hibernate Merge (Illegal attempt to associate a collection with two open sessions)

Hibernate 錯誤:  Illegal attempt to associate a collection with two open sessions


由於hibernate中的session的特性,不允許在一個session中同時存在兩個標示相同的對象也不允許
同一標示的對象被兩個或兩個以上的session關聯(當然,這個錯誤是後者,前者的錯誤:A different object
with the same identifier value was already associated with the session).遇到這種情況怎麼處理?


首先了解一個merge的特性:
1.現有一遊離狀態的對象(手動設置了id)
1).數據庫不存在此條記錄,merge會進行insert操作(update報錯)。
2).數據庫存在此條記錄,merge執行更新操作(與update一樣).
2.現有一遊離狀態的對象(id爲null)
1).數據庫當然不存在這個記錄,merge會insert操作,id根據策略(update會報錯)
3.現有一個臨時對象
1).session中沒有相同標示的對象,執行merge時,會直接查數據庫然後更新,並不會再把
查詢出來的對象放到session中.
2).session中有相同標示的對象,那麼直接將這個對象的值賦值到session中的那個持久化
對象上。

可以看出,merge和update的主要區別在於,數據庫存在(不存在)記錄是怎麼辦? 是否納入session中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章