hibernate对象的三种状态:
其中 get、save、update、delete、saveOrUpdate操作都是顾名思义的方法。
load、persist、merge、saveOrUpdate是hibernate作者新增的几个方法,功能和前面几个相似,但是却又有不同的意义。
在有事务的场景下处理持久化操作:
一、load 和 get 区别
1)load只有在需要用到查询对象时才会发出SQL语句,返回的是代理对象。而get方法则是直接查询发出SQL语句。
2)如果查询一个ID不存在的对象,load方法抛出ObjectNotFoundException,get方法返回null。
二、persist 和 save 区别
1) persist无返回值,save返回id。
三、update 和 merge 区别
1)merge的对象如果不是持久化状态,会先发出SQL查询对象,如果有需要更新才会执行更新SQL。而update是直接执行更新SQL。
2)如果对象不是持久化状态且数据库不存在ID记录,merge会新增记录,update会报错也会执行SQL。
四、merge 和 saveOrUpdate区别
1)saveOrUpdate无返回值,merge有返回值。
2)如果对象不是持久化状态,merge会先发出查询,而saveOrUpdate直接执行SQL 。