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 session的查询方法,commit方法,flush方法都会清理缓存.
2)flushmode.commit session的commit方法,flush方法会清理缓存.
3)flushmode.never session的flush方法会清理缓存.
对象的临时状态:刚用new创建对象的时候,它还没有被持久化,这个时候是临时状态.
对象的持久化状态:已经被加入到session的缓存中,通常所说的持久化对象就是只一个对象在这个状态的时候.
对象的游离状态:已经被持久化,但是不属于session的缓存的时候是游离状态.
posted on 2007-05-24 15:43
我心依旧 阅读(3796)
评论(0) 编辑 收藏