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
时,刷新持久性上下文,从而立即持久化对象