我知道Session.save()
会保留瞬态对象。我发现它还有saveOrUpdate()
,还有persist()
。
我认为save()
相当于SQL INCLUDE
,是吗?
如果我有一个已经存在于DB上的对象而我save()
它,是否会包含另一行,是否会更新其字段,还是会被忽略而没有任何事情发生?
答案 0 :(得分:19)
save
和saveOrUpdate
save
和saveOrUpdate
方法之间的主要区别在于save
会在数据库中生成新标识符和INSERT
记录,而saveOrUpdate
可以INSERT
或者基于记录的存在而更新。因此save
将继续执行而不执行存在检查,另一方面saveOrUpdate
将检查是否存在,如果记录存在则将更新,否则将插入新记录。
persist
和save
1)save
和persist
之间的第一个区别是return
类型。与save
方法类似,persist
也INSERT
记录到数据库中,但返回类型persist
为void
,而返回类型save
为{{} 1}}。
2)Serializable object
和persist
之间的另一个区别是两种方法都使瞬态实例持久化。但是,save
方法不保证标识符值将立即分配给持久性实例,分配可能在刷新时发生。
答案 1 :(得分:6)
save Persists an entity. Will assign an identifier if one doesn't exist.
If one does, it's essentially doing an update.
Returns the generated ID of the entity.
我建议,你真的需要阅读this继续进行。
答案 2 :(得分:2)
据我所知,发生的事情是这样的:
save()
只是保存您的实体persist()
正在将您的实例修改为托管实体。这意味着如果您对其进行操作并且您的交易仍处于打开状态,那么当您致电flush()
时(如果我没有记错的话),它将自动保存。merge()
还有一个类似persist()
但它正在返回一个新实例,而不是修改旧实例.... saveOrUpdate()
您可以see here 答案 3 :(得分:1)
save()方法将记录插入数据库。但是saveorupdate()方法检查pk是否找到pk然后更新数据,否则将数据插入数据库。