随笔 - 6  文章 - 129  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(14)

随笔档案(6)

文章分类(467)

文章档案(423)

相册

收藏夹(18)

JAVA

搜索

  •  

积分与排名

  • 积分 - 822222
  • 排名 - 49

最新评论

阅读排行榜

评论排行榜

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

只有注册用户登录后才能发表评论。


网站导航: