Java Hibernate会话方法saveOrUpdate()和merge()之间有什么区别?

Java Hibernate会话方法saveOrUpdate()和merge()之间有什么区别?,java,hibernate,Java,Hibernate,方法和方法之间有什么区别?这两种方法似乎都会在相应表中不存在给定对象时生成一条语句,并在该对象确实存在时生成一条语句。即使这是针对NHibernate的,它也适用于Hibernate: 如果我没记错的话,merge用于当前未管理的未关联实例。它将根据id进行查找并将两者合并。解释了saveOrUpdate()和merge()您是否确实阅读了链接到的java文档?:)是的。我看到的主要区别是merge()加载的对象不在会话中,而saveOrUpdate()不在会话中。这是否意味着部分对象的save

方法和方法之间有什么区别?这两种方法似乎都会在相应表中不存在给定对象时生成一条语句,并在该对象确实存在时生成一条语句。

即使这是针对NHibernate的,它也适用于Hibernate:


如果我没记错的话,merge用于当前未管理的未关联实例。它将根据id进行查找并将两者合并。

解释了
saveOrUpdate()
merge()
您是否确实阅读了链接到的java文档?:)是的。我看到的主要区别是
merge()
加载的对象不在会话中,而
saveOrUpdate()
不在会话中。这是否意味着部分对象的
saveOrUpdate()
覆盖所有字段,而
merge()
仅覆盖已设置为非空值的字段?或者两者产生相同的结果?可能重复“合并两个”对象意味着什么?它如何知道要合并哪些字段?它是否只合并那些不存在差异或存在差异且不为空的对象?第一种情况与更新没有区别,而第二种情况与保存和更新都有区别。请看关于引用规范3.2.4.1的链接问题的第二个答案-看起来分离的实例将覆盖大部分数据,除非某个字段标记为lazy或该类支持版本。根据第三条注释,NHibernate
Merge()
SaveOrUpdate()
产生完全相同的结果。(注释者指出,
SaveOrUpdate()
只是委托给
Merge()
)如果这是真的,那么Hibernate的情况就不一样了:-)两个调用可能产生相同的结果,但取决于实体的状态。我将只提供更新的链接,而不是复制文档:-)