Hibernate有几种方法,它们以一种或另一种方式将您的对象放入数据库。它们之间有什么区别,何时使用它们?为什么不只有一种智能的方法知道何时使用什么?
到目前为止,我已经确定的方法是:
save()
update()
saveOrUpdate()
saveOrUpdateCopy()
merge()
persist()
这是我对方法的理解。这些主要基于API,尽管我在实践中并未全部使用。
saveOrUpdate 根据某些检查调用保存或更新。例如,如果不存在标识符,则调用save。否则,将调用更新。
保存 保持实体。如果不存在,将分配一个标识符。如果有的话,它实际上是在进行更新。返回生成的实体ID。
更新 尝试使用现有标识符持久化实体。如果不存在标识符,则认为会引发异常。
saveOrUpdateCopy 已过时,不应再使用。相反,有…
合并 现在这是我的知识开始动摇的地方。这里重要的是临时实体,分离实体和持久实体之间的区别。有关对象状态的更多信息,请在此处查看。使用保存和更新,您可以处理持久对象。它们链接到会话,因此Hibernate知道发生了什么变化。但是,当您有一个临时对象时,就不会涉及会话。在这些情况下,您需要使用merge进行更新,并坚持保存。
持久 如上所述,它用于瞬态对象。它不返回生成的ID。