save
和saveOrUpdate
之间的区别是什么或save
和persist
之间的区别是任何Hibernate面试中常见的面试问题,就像Hibernate中get和load方法之间的区别一样。 Hibernate Session类提供了几种通过save
, saveOrUpdate
和persist
等方法将对象保存到数据库中的方法。 您可以根据将对象持久存储到Database中的要求使用save()
, saveOrUpdate()
或persist()
。 Hibernate问题与Spring框架Interview问题一起 ,在J2EE访谈中也很受欢迎,因为它的地位非常重要。 在出现在任何J2EE采访中之前,最好先准备Hibernate的一些问题。 其中之一是save
, saveOrUpdate
和persist
之间的区别 ,我们将在本文的Hibernate中看到这一点。 Hibernate中save和saveOrUpdate之间的区别
save
and
saveOrUpdate
方法 之间的主要区别是save()
生成一个新的标识符并将INSERT记录插入数据库,而saveOrUpdate
可以根据记录的存在而进行INSERT或UPDATE。 显然, saveOrUpdate
在使用方面更为灵活,但是它需要进行额外的处理才能找出表中是否已存在记录。 总而言之, save()
方法通过INSERT SQL查询将记录保存到数据库中,生成一个新的标识符,然后将Serializable标识符back
。 另一方面,基于数据库中对象的存在,可以使用INSERT或UPDATE的saveOrUpdate()
方法。 如果数据库中已存在持久性对象,则将执行 UPDATE SQL,并且如果数据库中没有对应的对象,则将运行INSERT。
Hibernate中保存和持久方法之间的区别
在上一节中,我们看到了save
和saveOrUpdate
之间的区别是什么,现在我们将看到save
方法与persist
方法的区别。
- save和
persist
之间的第一个区别是返回类型。 与保存方法persist
类似,也将INSERT记录插入数据库,但是persist
返回类型为void,而save的返回类型为Serializable对象。 -
persist
和保存之间的另一个区别是,这两种方法都使临时实例persist
。 但是,persist
()方法不能保证将标识符值立即分配给persist
实例,分配可能在刷新时发生。 - 区别Hibernate中
persist
和保存方法的另一件事是在事务边界之外存在行为。persist
()方法可确保如果在事务边界之外调用它,则不会执行INSERT语句。save()
方法不能保证相同,它返回一个标识符,并且如果必须执行INSERT来获取该标识符(例如“ identity”生成器),则无论您位于a的内部还是外部,此INSERT都会立即发生。交易。 - Hibernate中
save
和persist
方法之间的第四个区别与先前的save
和persist
差异有关。 由于其上述persist
方法在事务边界之外的行为,因此在具有扩展Session
上下文的长时间对话中很有用。 另一方面,在具有扩展Session上下文的长时间对话中,保存方法不是很好。
这些是Hibernate的save
, saveOrUpdate
和persist
方法之间的一些区别 。 这三种方法都与将对象保存到数据库有关,但是行为却大不相同。 有关save
, persist
和saveOrUpdate
知识,不仅有助于决定如何更好地使用Hibernate API,而且还可以帮助您在Hibernate采访中做得更好。
别忘了分享!
参考:我们的JCG合作伙伴 Javin Paul在Javarevisited博客上提供了Hibernate中save,persist和saveOrUpdate之间的区别 。
翻译自: https://www.javacodegeeks.com/2012/09/hibernate-save-vs-persist-and.html