Hibernate 有一些方法可以以某种方式获取您的对象并将其放入数据库中。它们之间有什么区别,何时使用哪个,为什么没有一种智能方法知道何时使用什么?
到目前为止我已经确定的方法是:
save()
update()
saveOrUpdate()
saveOrUpdateCopy()
merge()
persist()
以下是我对这些方法的理解。主要是这些基于API http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html尽管我在实践中并没有使用所有这些。
保存或更新根据某些检查调用保存或更新。例如。如果不存在标识符,则调用 save。否则调用更新。
save持久化一个实体。如果标识符不存在,将分配一个标识符。如果这样做,它本质上是在进行更新。返回生成的实体 ID。
update尝试使用现有标识符持久保存实体。如果不存在标识符,我相信会引发异常。
保存或更新复制这已被弃用,不应再使用。相反有...
merge现在这就是我的知识开始动摇的地方。这里重要的是瞬态、分离和持久实体之间的区别。有关对象状态的更多信息,看看这里 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/objectstate.html。通过保存和更新,您正在处理持久对象。它们链接到一个会话,以便 Hibernate 知道发生了什么变化。但是当你有一个瞬态对象时,就不涉及会话了。在这些情况下,您需要使用合并进行更新并使用坚持进行保存。
persist如上所述,这用于瞬态对象。它不返回生成的 ID。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)