hibernate学习笔记1——save、persist;load、get;merge、update比较

1.save()和persist()

hibernate之所以提供与save()功能几乎完全类似的persist()方法,一方面是为了照顾JPA的用法习惯;另一方面是save()和persist()方法还有一个区别:使用save()方法保存持久化对象时,该方法返回该持久对象的标识属性值(即对应记录的主键值);但使用persist()方法来保存持久化对象时,该方法没有任何返回值。因为save()方法需要立即返回持久化对象的标识属性值,所以程序执行save()方法会立即将持久化对象对应的数据插入数据库;而persist()则保证当它在一个事务外部调用时,并不立即转化成insert语句。而这个功能是很有用的,尤其是需要封装一个长会话流程的时候,persist()方法就显得尤为重要。

2.load()和get()

load()方法和get()方法的主要区别在于是否延迟加载,使用load()方法将具有延迟加载功能,load()方法不会立即访问数据库,当试图加载的记录不存在时,load()方法可能返回一个未初始化的代理对象;而get()方法总是立即访问数据库,当试图加载的记录不存在时,get()方法将直接返回null。

3.merge()与update()

merge()与update()方法的最大区别是:merge()方法不会持久化给定的对象,该方法的作用只是将当前对象的状态信息保存到数据库,并不将该对象转换成持久化状态,而是返回一个持久化状态的副本。例如:当程序执行session.update(a)代码后,a对象将会变成持久化状态;而执行session.merge(a)代码后,a对象依然不是持久化状态,a对象依然不会被关联到session上,merge()方法会返回a对象的副本——该副本处于持久化状态。

猜你喜欢

转载自blog.csdn.net/qq_37111953/article/details/78293756