一尘不染

Hibernate中不同的保存方法之间有什么区别?

hibernate

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

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

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

阅读 180

收藏
2020-06-20

共1个答案

一尘不染

这是我对方法的理解。这些主要基于API,尽管我在实践中并未全部使用。

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

保存 保持实体。如果不存在,将分配一个标识符。如果有的话,它实际上是在进行更新。返回生成的实体ID。

更新 尝试使用现有标识符持久化实体。如果不存在标识符,则认为会引发异常。

saveOrUpdateCopy 已过时,不应再使用。相反,有…

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

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

2020-06-20