【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.evict 将某个对象从一级缓存移除;如:getSession().evict(member);
Session.clear 清理该session的所有缓存对象。
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的所有缓存对象。
相关文章推荐
- session清理缓存的理解和如何清空缓存中的数据
- 【Hibernate学习笔记】Session清空缓存与清理缓存
- {传智播客} (学习笔记)--Hibernate的Session缓存问题与理解
- java入门学习(4)— 类,对象理解,如何创建类,对象
- Java Web 中application(应用级) session(会话级) request(请求级)如何实现数据共享
- JavaWeb中如何使用filter清空网页缓存
- 学习java应该如何理解反射?
- Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解
- 小白如何玩转Java的数据结构—轻松理解学习
- Golang web 开发实战之 session 缓存:如何使用 redigo 将一个结构体数据保存到 redis?
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解
- java入门、java学习:如何理解Java面向对象
- 深刻理解JAVA中堆栈和内存是如何分配地址;有助于学习Java语言。
- java学习总结(16.05.17)对数据类型取值范围和数据溢出的理解(以byte类型为例)
- 安卓开发如何清理应用缓存和数据
- 学习java应该如何理解反射?
- Java核心知识点学习----线程中如何创建锁和使用锁 Lock,设计一个缓存系统
- JavaWeb_Day10_学习笔记1_response(3、4、5、6、7、8、9)发送状态码、响应、重定向、定时刷新、禁用浏览器缓存、响应字节数据、快捷重定向方法、完成防盗链
- Hibernate学习笔记:理解一级缓存和session清理