Session 的缓存
Hibernate中缓存分为两种:一级缓存(Session级别)和二级缓存
(SessionFactory级别)。
Session 的作用:
1)充当蓄水池的作用,减少程序访问数据库的次数.很多对象数据不是经常改变的,第一次访问这些对象时,Hibernate会将它们放
入缓存中,以后只要这个对象没有改动过,访问这个对象时Hibernate就不会去数据库里加载它的数据,而是从内存中直接返回应用程序,这样子效率就比较高了.
2)保证缓存中的数据与数据库同步.缓存毕竟不是数据库,它的数据可能和数据库不一致,这时Hibernate会负责将缓存中的数据同步到数据库.当然这要参照FlushMode的具体设置.
Hibernate向我们提供的主要的操纵数据库的接口,Session就是其中的一个,它提供了基本的增,删,改,查方法.而且具有一个缓存机制,能够按照某个时间点,按照缓存中的持久化对象属性的变化来更新数据库,着就是Session的缓存清理过程.在Hibernate中对象分为三个状态,临时,持久化,游离.如果我们希望JAVA里的一个对象一直存在,就必须有一个变量一直引用着这个对象.当这个变量没了.对象也就被JVM回收了.当然这个是最基本的常识了.当Session的save()方法持久化了一个对象的时候,即使这个对象的引用变量小时了.这个对象也依然存在,因为Sessoin里保存了一个这个对象的引用,当然Session缓存被清空,这个对象就OVER了.在这个对象保存在Sessoin的时候如果调用load()方法试图去数据库中加载一个对象,这个时候Session会先判断缓存中有没有这个对象,如果有了,那么就不需要去数据库加载了.这样可以减少访问数据库的频率,还可以保证缓存中的对象于数据库的同步.
Session有两个方法,一个commit()事务提交方法,还有flush()刷新缓存方法,都有着清理缓存的作用,flush()进行缓存的清理,执行一系列的SQL语句,但不会提交事务.而commit()方法会先调用flush()方法,然后在提交事务.Session还有一个方法就是setFushMode()方法,用户设定清理缓存的时间点,主要有下面几种模式,默认Flush.Mode.AUTO
1)FlushMode.AUTO Hibernate 判断对象的属性是更改,如果被更改过成了脏数据,则会在下一个查询语句前将更新此改动以保证同步数据库.
2)FlushMode.COMMIT 在事务结束之前清理Session的缓存,其它任何时候都不清理缓存
3)FlushMode.NEVER 除非强制调用Session的flush()方法,否则永不清理缓存
4)FlushMode.ALWAYS 在每一个查询语句前都调用flush()方法进行缓存清理.
对象的临时状态:刚用new创建对象的时候,它还没有被持久化,这个时候是临时状态.
对象的持久化状态:已经被加入到Session的缓存中,通常所说的持久化对象就是只一个对象在这个状态的时候.
对象的游离状态:已经被持久化,但是不属于Session的缓存的时候是游离状态.
posted on 2007-10-29 09:21
Ke 阅读(639)
评论(0) 编辑 收藏 所属分类:
hibernate