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