Hibernate session的flushMode 属性

https://blog.csdn.net/looyo/article/details/6309136

这里面的清理缓存可以理解为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()之间,就保证在不清理缓存的情况,数据的一致性

猜你喜欢

转载自www.cnblogs.com/lxh520/p/9010031.html