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

yuvru6vn  于 2023-10-23  发布在  其他
关注(0)|答案(4)|浏览(134)

我知道Session.save()持久化 transient 对象。我看到它也有saveOrUpdate(),还有persist()
那么save()就等于SQL INCLUDE,对吗?
如果我有一个已经存在于数据库中的对象,我save()它,另一行会被包含吗?它的字段会被更新吗?或者它会被忽略而什么都不发生吗?

ekqde3dh

ekqde3dh1#

savesaveOrUpdate的区别

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

persistsave的基本区别

  1. savepersist之间的第一个区别是它们的return类型。与save方法类似,persist也将INSERT记录到数据库中,但persist的返回类型为void,而save的返回类型为Serializable object
  2. persistsave之间的另一个区别是,这两种方法都使 transient 示例持久化。但是,persist方法不能保证标识符值会立即分配给持久化示例,分配可能发生在刷新时。
rfbsl7qr

rfbsl7qr2#

this answer

保存保存实体。将分配一个标识符(如果不存在)。如果有,它基本上是在做更新。返回实体的生成ID。

我建议你阅读链接的答案以获取更多信息。

but5z9lq

but5z9lq3#

据我所知是这样的:

  1. save()只是保存您的实体
  2. persist()正在将示例修改为托管实体。这意味着,如果你做了一个操作,你的交易仍然是开放的,那么它将自动保存时,你调用flush()(如果我没有弄错)
  3. merge()还有一个类似于persist(),但它返回一个新示例,而不是修改旧示例。
  4. saveOrUpdate()您可以see here
xxhby3vn

xxhby3vn4#

保存()方法将记录插入数据库。但是saveorupdate()方法检查pk,如果pk被找到,那么它更新数据,否则将数据插入数据库。

相关问题