小编典典

Hibernate中不同的保存方式有什么区别?

all

Hibernate
有一些方法,它们以一种或另一种方式获取您的对象并将其放入数据库。它们之间有什么区别,什么时候使用哪个,为什么不只有一种智能方法知道什么时候使用什么?

到目前为止,我已经确定的方法是:

  • save()
  • update()
  • saveOrUpdate()
  • saveOrUpdateCopy()
  • merge()
  • persist()

阅读 111

收藏
2022-06-25

共1个答案

小编典典

这是我对这些方法的理解。这些主要是基于API,但我在实践中并没有使用所有这些。

saveOrUpdate 根据某些检查调用保存或更新。例如,如果不存在标识符,则调用 save。否则调用更新。

保存 实体。如果不存在,将分配一个标识符。如果是这样,它本质上是在进行更新。返回生成的实体 ID。

update 尝试使用现有标识符来持久化实体。如果不存在标识符,我相信会引发异常。

saveOrUpdateCopy 这已被弃用,不应再使用。取而代之的是…

合并
现在这是我的知识开始动摇的地方。这里重要的是瞬态、分离和持久实体之间的区别。有关对象状态的更多信息,请查看此处。使用保存和更新,您正在处理持久对象。它们与 Session 相关联,因此 Hibernate
知道发生了什么变化。但是当你有一个瞬态对象时,就不会涉及会话。在这些情况下,您需要使用合并进行更新并持久保存。

persist 如上所述,这用于瞬态对象。它不返回生成的 ID。

2022-06-25