session.Merge 和 session.SaveOrUpdate 有什么区别? [英] What's the difference between session.Merge and session.SaveOrUpdate?

查看:26
本文介绍了session.Merge 和 session.SaveOrUpdate 有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我注意到有时对于父/子对象或多对多关系,我需要调用 SaveOrUpdateMerge.通常,当我需要调用 SaveOrUpdate 时,我在调用 Merge 时遇到的异常与没有先保存瞬态对象有关.

I notice sometimes with my parent/child objects or many-to-many relationships, I need to call either SaveOrUpdate or Merge. Usually, when I need to call SaveOrUpdate, the exception I get on calling Merge has to do with transient objects not being saved first.

请说明两者的区别.

推荐答案

这是来自 10.7.Hibernate 参考文档的自动状态检测:

saveOrUpdate() 执行以下操作:

saveOrUpdate() does the following:

  • 如果对象已经在这个会话中持久化了,那么什么都不做
  • 如果与会话关联的另一个对象具有相同的标识符,抛出异常
  • 如果对象没有标识符属性,则保存()它
  • 如果对象的标识符具有分配给新的值实例化的对象,save()
  • 如果对象是版本化的(通过),并且version 属性值与分配给新的值相同实例化的对象,save()
  • 否则更新()对象

和merge()非常不同:

and merge() is very different:

  • 如果当前存在具有相同标识符的持久实例与会话相关联,将给定对象的状态复制到持久化实例
  • 如果当前没有与session,尝试从数据库中加载,或者创建一个新的持久化实例
  • 返回持久化实例
  • 给定的实例没有与会话关联,它保持分离

如果您尝试更新曾经与会话分离的对象,您应该使用 Merge(),尤其是当这些对象可能存在当前与会话关联的持久实例时.否则,在这种情况下使用 SaveOrUpdate() 会导致异常.

You should use Merge() if you are trying to update objects that were at one point detached from the session, especially if there might be persistent instances of those objects currently associated with the session. Otherwise, using SaveOrUpdate() in that case would result in an exception.

这篇关于session.Merge 和 session.SaveOrUpdate 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆