save和saveOrUpdate方法之间的区别是hibernate

com*_*mit 23 java hibernate

通常我读过关于save()方法生成对象的新标识符并且只触发INSERT并保存它,它不会更新它,而saveOrUpdate()方法可能会INSERTUPDATE记录.

但根据我的经验,我可以通过示例代码更好地解释,

假设有A类,我觉得从记录表A

A a = getHibernateTemplate.findById(7);
Run Code Online (Sandbox Code Playgroud)

所以现在我得到一个持久对象,

现在我试图通过简单修改一些字段来保存使用save方法的记录,

现在我开火了,

getHibernateTemplate.save(a);
Run Code Online (Sandbox Code Playgroud)

所以它只是更新现有记录,但据我所知,它应该创建新的记录.

我可能对certian事情有误,有人可以清楚这个吗?

PVR*_*PVR 27

保存

method商店保存object到数据库中.它将保留给定的瞬态实例,首先分配生成的标识符.它returns是创建的实体的id.

然而,

saveOrUpdate()方法

调用任一save()update()上的标识符的基础上存在与否.例如,如果存在标识符,update()则将被调用,否则save()将被调用.

还有更多像persist(),merge(),saveOrUpdateCopy().几乎所有都是相同的,提供略微不同的功能和可用性.

有关更多信息,请阅读此内容. Hibernate中不同的保存方法有什么区别?

  • 我猜你的答案中有拼写错误.请更正它.你的回答是"如果存在标识符,将调用save(),否则将调用update()." 它应该是"如果标识符存在,则调用update()或者调用save()." (2认同)

Ruc*_*era 9

所述的org.hibernate.Session类方法之间的重要区别,保存&saveOrUpdate是,save产生在一个INSERT查询一个新的标识符和的结果,而saveOrUpdate确实一个INSERT或UPDATE.

保存

Save方法将对象存储到数据库中.这意味着如果标识符不存在,它会插入一个条目,否则会抛出错误.如果主键已经存在于表中,则无法插入.

saveOrUpdate

此方法基于操作调用save()或update().如果标识符存在,它将调用update方法,否则将调用save方法.saveOrUpdate()方法执行以下操作:

如果对象是在当前会话中已经持久的,它什么也不做如果与会议相关的另一个对象具有相同的标识符,抛出一个异常给调用者如果对象没有标识值,保存()的对象,如果对象的标识符具有分配给新实例化对象的值,save()对象

这里了解更多.