码迷,mamicode.com
首页 > 系统相关 > 详细

hibernate flushmode

时间:2014-08-25 15:00:24      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   io   strong   数据   ar   art   div   


这里面的清理缓存可以理解为hibernate自动执行了一次 session.flush();

选择什么样的flush mode就是采取对hibernate session采取什么样的数据刷新的策略。
Session.setFlushMode()用于设定清理缓存的时间点。

对比一下几种flush mode:

FlushMode.AUTO: 
调用Session的查询方法时,清理缓存,注意:这条规则必须保证显式开启的事务中,对于outside a transaction
调用Session.commit()时,清理缓存
调用Session.flush()时,清理缓存

FlushMode.COMMIT:
调用Session的查询方法时,不清理缓存
调用Session.commit()时,清理缓存
调用Session.flush()时,清理缓存

FlushMode.NEVER(MANUAL):
调用Session的查询方法时,不清理缓存
调用Session.commit()时,不清理缓存
调用Session.flush()时,清理缓存


FlushMode.ALWAYS:测试未发现和auto有什么区别。

 调用Session的查询方法时,清理缓存,注意:这条规则必须保证显式开启的事务中,对于outside a transaction
调用Session.commit()时,清理缓存
调用Session.flush()时,清理缓存

=================

三种情况分别在以下时机同步数据库
session.flushmode=manual 
1.只有手动调用flush()


session.flushmode=commit
1.手动调用flush()
2.commit()时候


session.flushmode=auto 
1.手动调用flush()
2.commit()时候
3.查询前 (经过测试(oracle驱动),必须在事务内,不确定是否全部情形)

==================

对比一下,请注意FlushMode.NEVER
如果在调用Session的查询方法之前,不清理缓存,那么就会引入脏数据
所以会有那一步
session.flush(); // who know‘s what been done till now
在FlushMode.NEVER之前,将缓存清理,保证数据正确。

在文中最后一段程序中:
将FlushMode.NEVER夹在两个session.flush()之间,就保证在不清理缓存的情况,数据的一致性。

 


下面的文章值得一看。


《了解Hibernate的FlushMode.NEVER模式》

 

 

 

http://www.51cto.com/specbook/229/34023.htm

 

http://www2.matrix.org.cn/resource/article/2006-10-08/Hibernate+FlushMode+NEVER_312bca85-5699-11db-91a0-d98dff0aec60.html

hibernate flushmode

标签:style   http   color   io   strong   数据   ar   art   div   

原文地址:http://blog.csdn.net/huaweitman/article/details/38820373

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!