您的位置:首页 > 编程语言 > Java开发

【JAVA学习】session 清理缓存的理解 和 如何 清空缓存中的数据

2014-07-03 17:21 741 查看
尊重版权:http://blog.sina.com.cn/s/blog_62a151be0100nf28.html

Session执行一些sql语句把内存中的对象的状态同步到数据库,这个过程被称为session清理.

在默认情况下,Session会在下面的时间点清理缓存。

1 当应用程序调用net.sf.hibernate.Transacation的commit()方法的时候,commit()方法先清理缓存,然后再向数据库提交事务。

2 当应用程序调用Session的find()或者iterate()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。

3 当应用程序显示调用Session的flush()方法的时候。

注意Session的commit()和flush()方法的区别。flush()方法进行清理缓存的操作,执行一系列的SQL语句,但不会提交事务;commit()方法会先调用flush()方法,然后提交事务。提交事务意味着对数据库所做的更新被永久保存下来。

执行session清理的顺序:

1.按照应用程序调用session.save()方法的衔后顺序,执行所有对实进行插入的insert语句。

2.执行所有对实体进行更新的update语句。

3.执行所有对集合进行删除的delete语句。

4.执行所有对集合元素进行删除、更新或者插入的SQL语句。

5.执行所有对集合进行插入的insert语句。

6.按照应用程序调用session.delete()方法的先后顺序,执行所有对实体进行删除的delete语句。

Session的setFlushMode()方法用于设定清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT和FlushMode.NEVER。

清理缓存的模式
Session的查询方法
Session的commit()方法
Session的flush()方法
FlushMode.AUTO清理清理清理
FlushMode.COMMIT不清理清理清理
FlushMode.NEVER不清理不清理不清理
在批量处理大量数据的时候为了避免内存溢出,可手动干预一级缓存:

Session.evict 将某个对象从一级缓存移除;如:getSession().evict(member);

Session.clear 清理该session的所有缓存对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐