码迷,mamicode.com
首页 > 其他好文 > 详细

Session脏检查及清理缓存机制

时间:2017-03-14 18:49:17      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:更新   upd   java   缓存   isp   资源   方法   技术分享   comm   

  今天看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语句。

Session脏检查及清理缓存机制

标签:更新   upd   java   缓存   isp   资源   方法   技术分享   comm   

原文地址:http://www.cnblogs.com/cupidhk/p/6549694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!