merge和update的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了merge和update的区别相关的知识,希望对你有一定的参考价值。

参考技术A 比较直观的一个区别是,使用update是将实体信息与数据库同步更新。当实体找不到id时,会报错。但用merge方法时,如果找不到id,会保存一条新信息。所以这就是你说的用update报错,用merge就对了

Hibernate中saveOrUpdate()和merge()的区别

this.getSession().merge(obj);

this.getSession().saveOrUpdate(obj);

saveOrUpdate():

saveOrUpdate()基本上就是合成了save()和update()

1.如果该po对象已经在本session中持久化了,在本session中执行saveOrUpdate不做任何事 

2.如果savaOrUpdate(新po)与另一个与本session关联的po对象拥有相同的持久化标识(identifier),抛出一个异常 

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:

[org.itfuture.www.po.Xtyhb#5]

3.saveOrUpdate如果对象没有持久化标识(identifier)属性,对其调用save() ,否则update() 这个对象

merge():

1.如果session中有与之对应的对象(主键相同),则会把要保存的obj值复制给session中的对象,然后修改被复制后的session对象

2.如果session中没有与之对应的对象(主键相同),则会先从数据库中查询一道,然后把所查出来的obj对象复制,则修改查出来的对象

3.marge()会先查询再修改,merge()后的对象obj状态为托管

 

以上是关于merge和update的区别的主要内容,如果未能解决你的问题,请参考以下文章

怎样使用Hibernate中的merge方法 merge方法和update方法的区别

ORACLE11g update和merge into 的区别

Firestore 方法 docRef.set(someData, merge:true) 和 docRef.update(someData) 之间的区别? [复制]

Hibernate save, saveOrUpdate, persist, merge, update 区别

Hibernate Session的save()update()merge()lock()saveOrUpdate()和persist()方法分别是做什么的?有什么区别?

Hibernate save()saveOrUpdate()merge()的区别