【學習筆記】hibernate saveOrUpdate與merge的區別

最近比較空重新將Hibernate的參考文檔閱讀了一遍,收穫還是頗多。關於merge.摘原文與記之。 通常下面的場景會使用update()或saveOrUpdate(): 程序在第一個session中加載對象 該對象被傳遞到表現層 對象發生了一些改動 該對象被返回到業務邏輯層 程序調用第二個session的update()方法持久這些改動 saveOrUpdate()做下面的事: 如果對象已經在本session中持久化了,不做任何事 如果另一個與本session關聯的對象擁有相同的持久化標識(identifier),拋出一個異常 如果對象沒有持久化標識(identifier)屬性,對其調用save() 如果對象的持久標識(identifier)表明其是一個新實例化的對象,對其調用save() 如果對象是附帶版本信息的(通過或) 並且版本屬性的值表明其是一個新實例化的對象,save()它。 否則update() 這個對象 merge()可非常不同: 如果session中存在相同持久化標識(identifier)的實例,用用戶給出的對象的狀態覆蓋舊有的持久實例 如果session沒有相應的持久實例,則嘗試從數據庫中加載,或創建新的持久化實例 最後返回該持久實例 用戶給出的這個對象沒有被關聯到session上,它依舊是脫管的
發佈了29 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章