Session脏检查及清理缓存机制

本文探讨了Hibernate框架中Session的缓存机制及其脏检查原理。揭示了即使不显式调用update()方法,对象也能与数据库进行交互的机制。通过特定时机的缓存清理,确保了数据的一致性和事务的正确提交。

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

        今天看hibernate书,看到“理解Session的缓存”这一张脏检查及清理缓存的机制后,突然明白程序中session并非一定要执行update()方法。没有执行update()方法,对象仍会与数据库进行数据交互。

  Session脏检查及清理缓存机制:

 

  Session缓存中对象的属性每次改变时,Session不会立即清理缓存及执行Update SQL,而是会在特定时间清理缓存(执行相应的sql),提交事务。

清理缓存时,会相应的改变对象的状态。

  Java对象在内存中有四个状态:临时状态(transient)、持久化状态(persistent)、游离状态(detached)、删除状态(removed)。

  Session做任何的操作,如果没有显示的调用commit()方法,都不会清理缓存、执行相应的SQL、提交事务。对象在Hibernate持久层中做不同的操作,会相应的改变其状态。如图上。

  Session会在特定的时间清理缓存。那么特定时间指的是什么时候呢?

  1) 当应用程序调用org.hibernate.Transaction的commit()方法时,commit()方法会先清理缓存,然后向数据库提交事务。先清缓存再提交事务,有两个好处,一可以减少访问数据库的频率,二可以缩短当前事务对数据库中相关资源的锁定时间。

  2) 当应用执行一些查询操作时。如缓存中持久化对象属性已改变,就会先清缓存,使得Session缓存与数据库同步,从而保证查询数据的正确性。

  3) 当应用程序显示调用Session的flush()方法时。

  Session在特定的时间清理了缓存,那么是如何清理缓存的呢?

  1) 按照应用程序调用session.save()方法的先后顺序,执行所有对实体进行插入的insert语句。

  2) 执行所有对实体进行更新的update语句。

  3) 执行所有对集合进行删除的delete语句。

  4) 执行所有对集合元素进行删除、更新或者插入的SQL语句。

  5) 执行所有对集合进行插入的insert语句。

  6) 按照应用程序调用sessiondelete()方法的先后顺序,执行所有对实体进行删除的delete语句。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值