(快速參考)

合併

目的

將網域類別實例合併回目前的持續性內容,並傳回新的合併實例。

範例

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 會清除持久性內容,因此立即儲存物件