文章目录
  1. 1. save和saverOrUpdate的区别
  2. 2. save和persist的区别

Hibernate的Session类提供了将对象保存到数据库的方法,例如save,saverOrUpdate还有persist。可以根据自己的需要来选择使用save,saverOrUpdate或者persist。所以能过对着三个方法之间的区别有一定的了解对开发会有一定帮助,当然,这个问题在面试过程中也有可能会遇到。

save和saverOrUpdate的区别


最主要的区别是save()方法生成一个新的标识符(identifier),然后在数据库中插入一条记录,并且返回一个Serializable对象;而saverOrUpdate()是根据是否在数据中存在来选择插入(INSERT)或者是更新(UPDATE)。如果持久化的对象已经在数据库中,则执行UPDATE SQL。

saverOrUpdate()方法使用更灵活,但却涉及到一个额外的流程去查找该对象在数据库中是否存在。

save和persist的区别


  • 返回类型不同。两个方法都会将对象插入到数据,但save返回的是Serializable对象,而persist返回的是void。
  • ID赋值时机不同。二者同样用于将transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值。
  • transaction外的行为不同。如果在transaction之外调用,persist保证会立即执行INSERT语句;而save则不保证(save返回一个identifier,如果必须执行INSERT来获取该identifier,则就会立即执行INSERT,而不论是在transaction之内或之外)
  • 使用场景。persist方法适用于被扩展的Session上下文的长期运行的会话中,而save则不适用。(Because of its above behavior of persist method outside transaction boundary, its useful in long-running conversations with an extended Session context. On the other hand save method is not good in a long-running conversation with an extended Session context.)
文章目录
  1. 1. save和saverOrUpdate的区别
  2. 2. save和persist的区别