(快速参考)

合并

目的

将域类实例合并回当前持久性上下文中,并返回一个新合并的实例。

示例

def b = new Book(title: "The Shining")
b = b.merge()

描述

merge 方法与 save 方法在功能上相似,但在行为上不同。merge 允许合并“分离的”实例,例如存储在 HTTP session 中的实例。每个持久实例都与一个持久性上下文相关联。每次为 request 创建一个新的持久性上下文。结果是存储在 HTTP 会话中的对象在后续请求中会丢失其持久性上下文。在这种情况下,您无法简单地调用 save,因为域类与当前上下文没有关联。

另一方面,merge 方法可以让您将分离的对象的状态合并回当前 Hibernate 会话中。与 save 方法不同,此方法返回重新附加的对象所表示类的全新实例。换句话说,您必须编写类似这样的代码

book = book.merge()

如果您不使用 merge 方法的返回值,那么您仍然可以访问原始的未修改的分离实例,并且您将收到错误,例如延迟初始化异常。

merge 方法在 Hibernate 文档中定义如下

将给定对象的状态复制到具有相同标识符的持久对象上。如果没有当前与会话关联的持久实例,则会加载该实例。如果给定的实例未保存,则保存其副本并将其作为新持久实例返回。

merge 方法相当于 Hibernate 的 merge 方法。

参数

  • validate(可选)-如果应跳过验证,则设置为 false

  • flush(可选)-当设置为true时,刷新持久性上下文,从而立即持久化对象