Hibernate清理缓存
来源:互联网 发布:数控编程软件哪个好用 编辑:程序博客网 时间:2024/04/30 07:55
在默认情况下,session会在下面的时间点清理缓存
1 当应用程序调用net.sf.hibernate.Transaction的commit()方法时,commit()方法先清理缓存,然后再看数据库提交事务
2 当调用session的find()或者iterator()时,如果缓存中持久化对象的属性发生了变化,就会先清理缓存,以保证查询结果能反映持久化对象的最新状态。
3 当应用程序显式调用session的flush()方时。
Session的setFlushMode()方法用于设定清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT和FlushMode.NEVER。例如,以下代码显示把清理模式设为FlushModo.Commit:
session.setFlushMode(FlushMode.COMMIT);
三种清理模式
清理缓存的模式
Session的查询方法
Session的commit()方法
Session的flush()方法
FlushMode.AUTO 清理 清理 清理 FlushMode.COMMIT 不清理 清理 清理 FlushMode.NEVER 不清理 不清理 不清理
FlushMode.AUTO是默认值,这也是优先考虑的清理模式,它会保证在整个事务中,数据保持一致。如果事务公包含查询数据库的操作,而不会修改数据库的数据,也可以选用FlushMode.COMMIT模式,这可以避免在执行Session查询方法时先清理缓存,以稍微提高应用程序的性能。
在大多数情况下,应用程序不需要显示调用Session的flush()方法,flush()方法适用于以下场合:
(1)插入、删除或更新某个持久化对象会引发数据库中的触发器。假定向CUSTOMERS表新增一条记录时会引发一个数据库触发器,在应用程序中,通过Session的save()方法保存了一个Customer对象,应用随后调用Session的flush()方法:
session.save(customer);
session.flush();
Session的flush()方法会立即执行insert语句,该语句接着引发相关的触发器工作。
(2)在应用程序中混合使用Hibernate API和JDBC API。
(3)JDBC驱动程序不健壮,导致Hibernate在自动清理缓存的模式下无法正常工作。
来自:http://blog.sina.com.cn/s/blog_530bf5d20100byk5.html
下面我们分析一下几种方法:
1 clear()方法
我们可以在session-factory标签下创建property标签,name属性为hibernate.jdbc.batch_size,值为我们想要设定的数字,假如为100,下一步当我们执行操作flush()发送SQL语句时候调用session.clear()方法,就可以实现清除缓存的效果了。
- for(int i=0;i<1000;i++){
- Order order = new Order();
- order.setId();
- session.save(order);
- if(i%100==0){
- session.flush();
- session.clear();
- }
- }
2 evict()方法
该方法于上一个方法不同,它只能用于处理单个对象的清除工作。
- for(int i=0;i<1000;i++){
- Order order = new Order();
- order.setId();
- session.save(order);
- session.evict();//清除session缓存
- SessionFactory.evict();//清除二级缓存
- }
- Hibernate清理缓存
- Hibernate清理缓存
- Hibernate清理缓存
- 【Hibernate学习笔记】Session清空缓存与清理缓存
- 【Hibernate】Session清空缓存与清理缓存
- 缓存清理
- 清理缓存
- 缓存清理
- 清理缓存
- 清理缓存
- 清理缓存
- 清理缓存
- 清理缓存
- 清理缓存
- 清理缓存
- 清理缓存
- Hibernate学习笔记:理解一级缓存和session清理
- 得到缓存及清理缓存
- 解决Ext.Window放大关闭后滚动条消失和滚动页面时最大化Window位置的方法
- hibernate二级缓存的实现方法
- hibernate缓存详解
- Java正则表达式应用总结
- reactos操作系统实现(79)
- Hibernate清理缓存
- ExtJS学习笔记(七) 使用树控件TreeNode
- Hibernate查询方法与缓存的关系
- Hibernate查询缓存
- hibernate级联操作及缓存
- Hibernate缓存何时使用和如何使用
- Hibernate中 一 二级缓存及查询缓存的学习总结
- Hibernate 缓存问题
- Hibernate查询缓存综合