当前位置:首页>开发>正文

Hibernate中save方法是如何得来的 Hibernate 的Session 中的save()方法和persist()方法有什么区别

2023-07-04 03:15:59 互联网 未知 开发

 Hibernate中save方法是如何得来的 Hibernate 的Session 中的save()方法和persist()方法有什么区别

Hibernate中save方法是如何得来的

你是指电脑的休眠功能,对吧?

休眠,在广义上包括挂起到内存(STR,也就是待机)和挂起到硬盘(Suspend to Disk,简称STD)两种,而我们通常所指的休眠其实是STD。当电脑进入休眠状态时,电脑首先将内存中的状态复制到硬盘,然后关闭电源。此时电脑几乎和通常关机一样“安静”,你完全可以切断电源,因为保存到硬盘里面的数据不会由于断电而丢失!它和Ghost给系统做镜像的道理一样,不过与Ghost不同的是:Ghost保存并恢复的是整个系统信息,而休眠保存并恢复的是系统运行的信息。与待机相比,休眠是不能通过外部设备来唤醒的,它和正常开机一样启动电脑;不过和开机相比,休眠后启动电脑无需一个一个进程地来启动,只须要将硬盘中的内存镜像读取到内存中即可。 由于内存中的资料就是电脑当前的“状态”,为保持这个状态不变(可理解为不能压缩),系统必须在硬盘中开辟一个和内存容量大小相等的空间以保证能装下整个内存的“当前状态”,而这个空间的名字就叫hiberfil.sys,它的体积一般为物理内存的大小(比如电脑的内存是256MB,这个文件的体积也将是256MB,如图1),和我们管虚拟内存叫做pagefile.sys道理是一样的。

Hibernate 的Session 中的save()方法和persist()方法有什么区别

save()和 persist()方法区别:
使用 save()
方法保存持久化对象时,该方法返回该持久化对象的标识属性值(即对应记录的主键值);
使用 persist()
方法来保存持久化对象时,该方法没有任何返回值。因为 save() 方法需要立即返回持久化对象的标识属性,所以程序执行 save()
会立即将持久化对象对应的数据插入数据库;而 persist() 则保证当它在一个事物外部被调用时,并不立即转换成 insert 语句,
这个功能是很有用的,尤其当我们封装一个长会话流程的时候,persist() 方法就显得尤为重要了。
save与persist的区别

1,返回类型不同:save返回Serializable对象,而persist返回void
Hibernate的原方法:
public Serializable save(Object object)

public void persist(Object object)
2,ID赋值时机不同:二者同样用于将transient实例持久化,但persist不保证ID值立即赋给持久化实例,可能会在flush的时候给ID赋值。
3,transaction外的行为不同:如果在transaction之外调用,persist保证会立即执行INSERT语句;而save则不保证(save返回一个identifier,如果必须执行INSERT来获取该identifier,则就会立即执行INSERT,而不论是在transaction之内或之外)
使用场景:由于上述第三点区别,persist方法适用于被扩展的Session上下文的长期运行的会话中(useful in long-running conversations with an extended Session context);而save则不适用。