Hibernate Session 中的 saveOrUpdate() 和 merge() 方法有什么区别?

7

1
你真的读了你链接的Java文档吗? :) - willcodejavaforfood
是的,我做到了。我看到的主要区别是merge()加载一个不在会话中的对象,而saveOrUpdate()则不会。这是否意味着saveOrUpdate()对于部分对象的更新会覆盖所有字段,而merge()仅覆盖已设置为非空值的字段?还是两者产生相同的结果? - Derek Mahar
3个回答

1

根据第三条评论,NHibernate的Merge()SaveOrUpdate()产生完全相同的结果。(评论者指出SaveOrUpdate()只是委托给了Merge()。) - Derek Mahar
1
好的,如果这是真的,那对于Hibernate来说就不一样了 :-) 两个调用可能会产生相同的结果,但取决于实体的状态。我不想复制文档,只提供更新后的链接 :-) http://docs.jboss.org/hibernate/core/3.5/reference/en/html/objectstate.html#objectstate-saveorupdate - jpkroehling

1

如果我记得没错的话,合并(merge)是用于没有关联实例且当前未被管理的情况。它会根据 ID 进行查找并合并这两个实例。


“合并两个对象”是什么意思?它如何知道要合并哪些字段?它只合并那些不相异或不为空的字段吗?第一种情况与更新没有区别,而第二种情况则与保存和更新都不同。 - Derek Mahar
看一下链接的问题中第二个答案,引用了规范3.2.4.1 - http://stackoverflow.com/questions/3870844/best-approach-for-updation-using-jpa 除非字段被标记为lazy或类支持版本,否则似乎分离实例将覆盖大部分数据。 - Scott

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接