def b = new Book(title: "The Shining")
b = b.merge()
合併
目的
將網域類別實例合併回目前的持續性內容,並傳回新的合併實例。
範例
說明
merge
方法的功能類似於 save 方法,但行為不同。merge
允許合併「分離」實例,例如儲存在 HTTP session 中的實例。每個持續性實例都與持續性內容關聯。會為每個 request 建立新的持續性內容。結果是儲存在 HTTP session 中的物件會在後續的 request 中失去其持續性內容。在此情況下,您無法直接呼叫 save,因為網域類別未與目前的內容關聯。
另一方面,merge
方法讓您可以將分離物件的狀態合併回目前的 Hibernate session。與 save
方法不同,此方法會傳回表示重新附加物件的新類別實例。換句話說,您必須撰寫類似這樣的程式碼
book = book.merge()
如果您未使用 merge
方法的傳回值,則您仍然可以存取原始未修改的分離實例,而且您會收到錯誤,例如延遲初始化例外。
merge
方法在 Hibernate 文件中定義如下
將給定物件的狀態複製到具有相同識別碼的持續性物件。如果目前沒有與 session 關聯的持續性實例,則會載入該實例。如果給定的實例未儲存,則儲存副本並將其傳回為新的持續性實例。
merge
方法等同於 Hibernate merge 方法。
參數
-
validate
(選用) - 設定為false
,如果驗證應該略過 -
flush
(選用) - 設定為true
會清除持久性內容,因此立即儲存物件