首页 > 系统服务 > 详细

hibernate flushmode

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


这里面的清理缓存可以理解为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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!