org.hibernate.Session.save()到底做了什么?

时间:2013-03-05 14:28:33

标签: java hibernate

我知道Session.save()会保留瞬态对象。我发现它还有saveOrUpdate(),还有persist()

我认为save()相当于SQL INCLUDE,是吗?

如果我有一个已经存在于DB上的对象而我save()它,是否会包含另一行,是否会更新其字段,还是会被忽略而没有任何事情发生?

4 个答案:

答案 0 :(得分:19)

savesaveOrUpdate

之间的差异

savesaveOrUpdate方法之间的主要区别在于save会在数据库中生成新标识符和INSERT记录,而saveOrUpdate可以INSERT或者基于记录的存在而更新。因此save将继续执行而不执行存在检查,另一方面saveOrUpdate将检查是否存在,如果记录存在则将更新,否则将插入新记录。

persistsave

之间的基本差异

1)savepersist之间的第一个区别是return类型。与save方法类似,persistINSERT记录到数据库中,但返回类型persistvoid,而返回类型save为{{} 1}}。

2)Serializable objectpersist之间的另一个区别是两种方法都使瞬态实例持久化。但是,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)

据我所知,发生的事情是这样的:

  1. save()只是保存您的实体
  2. persist()正在将您的实例修改为托管实体。这意味着如果您对其进行操作并且您的交易仍处于打开状态,那么当您致电flush()时(如果我没有记错的话),它将自动保存。
  3. merge()还有一个类似persist()但它正在返回一个新实例,而不是修改旧实例....
  4. saveOrUpdate()您可以see here

答案 3 :(得分:1)

save()方法将记录插入数据库。但是saveorupdate()方法检查pk是否找到pk然后更新数据,否则将数据插入数据库。