Hibernate的Session

本文解释了Session缓存的工作原理,包括对象如何被加载到缓存中以及缓存如何减少数据库访问频率。文中还介绍了session.refresh(), session.flush(), session.clear()等方法的功能区别,并强调了这些操作对缓存和数据库的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解Session的缓存:

当session的save()方法持久化一个对象时,该对象被载入缓存,以后即使程序中不再引用该对象,只要缓存不清空,该对象仍然处于生命周期中。当试图load()对象时,会判断缓存中是否存在该对象,有则返回。


缓存的作用:

1.减少访问数据库的频率。

2.保证缓存中的对象与数据库中的相关记录保持同步。

3.当缓存中的持久化对象之间存在循环关联关系时,Session会保证不出现访问对象图的死循环,以及由死循环引起的JVM堆栈溢出异常。


注意:session中有监控功能是因为它对每个对象都会产生一个快照

当Session加载了customer对象后,会为customer对象的值类型的属性复制一份快照。当清理缓存时,通过比较对象的当前属性和快照,来判断对象的哪些属性发生了变化。

如图:



session.refresh():刷新,让缓存数据参照数据库数据进行缓存中数据的更新。

session.flush():清理,让数据库数据参照缓存数据进行数据库中数据的更新,但是并不提交事务。

session.clear():清空,删掉所有缓存的引用。(但是并不意味着被引用的对象立即被垃圾回收机制清除,因为还可能有其他变量引用此对象)


注意session的commit()和flush()方法的区别:

1.flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务

2.commit()方法会先调用flush()方法,然后提交事务。提交事务意味着对数据库所做的更新被永久保存下来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值