hibernate的session和缓存

 

一直对hibernate的session比较模糊,用了好久,终于心血来潮研究了一段时间,特别做下记录


一级缓存

    由hibernate的Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口list,filter,iterate时,如session缓存中还不存在相应的对象,Hibernate会把该对象加入到一级缓存中

 操作缓存的方法:

evict() :用于将某个对象从Session的一级缓存中清除。持久对象变成脱管对象

evict()方法适用于以下二种情况:
1)不需要该对象进行同步的数据更新
2)在批量进行更新与删除时,当更新删除每一个对象后,要释对此对象所占用的内存

●clear() :用于将一级缓存中的所有对象全部清除

 在进行大批量数据一次性更新的时候,会占用非常多的内存来缓存被更新的对象。这时就应该阶段性地调用clear()方法来清空一级缓存中的对象,控制一级缓存的大小,以避免产生内存溢出的情况。

例如:

 

Admin admin=adminDAO.findById(1);

system.out.println(admin.getAdminName());//输出:小王

admin.setRealName("小张");                        //更新一级缓存中写入admin的name为小张


 

 

对象的三种状态:

persistent:

transient

detached

1. 本质上与瞬时对象相同,在没有任何变量引用它时,JVM会在适当的时候将它回收

2.   比瞬时对象多了一个数据库记录标识值。

 

session的关闭:

关闭后发生的动作:

1.session结束后自动提交session的数据。当然也可以手动提交例如:adminDAO.flush();可将数据写入数据库
Session关闭的时候该Session所管理的一级缓存也会立即被清除
Hibernate的一级缓存是Session所内置的,不能被卸载,也不能进行任何配置

 

 

未完待续。。。。


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值