关于spring+hibernate的FlushMode的记录
来源:互联网 发布:校园暴力知乎 编辑:程序博客网 时间:2024/05/17 21:18
FlushMode可以理解为hibernate清理缓存的几种模式,这里面清理缓存可以理解为hibernate自动执行了一次 session.flush();
选择什么样的flush mode就是采取对hibernate session采取什么样的数据刷新的策略。
说明FlushMode有五种属性
1 NEVEL
已经废弃了,被MANUAL取代了
2 MANUAL
spring3.x中的opensessioninviewfilter已经将默认的FlushMode设置为MANUAL了;
如果FlushMode是MANUAL或NEVEL,在操作过程中hibernate会将事务设置为readonly,所以在增加、删除或修改操作过程中会出现如下错误
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition;
解决办法网上有很多;
1 配置事务,spring会读取事务中的各种配置来覆盖hibernate的session中的FlushMode;
2 先编程式修改FlushMode,比如session.setFlushMode(FlushMode.AUTO); 这样hibernate就会自动去除readonly限制;
3 直接修改opensessioninviewfilter过滤器的配置,配置过滤器的时候配置
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
3 AUTO
设置成auto之后,当程序进行查询、提交事务或者调用session.flush()的时候,都会使缓存和数据库进行同步,也就是刷新数据库4 COMMIT
提交事务或者session.flush()时,刷新数据库;查询不刷新
5 ALWAYS
每次进行查询、提交事务、session.flush()的时候都会刷数据库
这里需要说一下和AUTO的区别,当hibernate缓存中的对象被改动之后,会被标记为脏数据(即与数据库不同步了)。当session设置为FlushMode.AUTO时,hibernate在进行查询的时候会判断缓存中的数据是否为脏数据,是则刷数据库,不是则不刷,而always是直接刷新,不进行任何判断。很显然auto比always要高效得多。
以上内容转自网络:http://hi.baidu.com/ljmybfq/item/b751951e237557fb64eabf5d
- 关于spring+hibernate的FlushMode的记录
- 关于spring+hibernate的FlushMode的记录
- 关于spring+hibernate的FlushMode的记录
- 关于spring+hibernate的FlushMode的记录
- Hibernate的FlushMode
- 了解Hibernate的FlushMode.NEVER
- hibernate session的flushMode的区别
- JPA的FlushModeType与Hibernate的FlushMode
- hibernate session的flushMode的区别
- hibernate中session的flushMode的区别
- hibernate session的flushMode的区别
- 了解Hibernate的FlushMode.NEVER模式
- 了解Hibernate的FlushMode.NEVER模式
- Hibernate session FlushMode的五种设置
- Hibernate session FlushMode的种属性
- Hibernate session FlushMode的五种设置
- Hibernate的FlushMode与session.flush()
- spring 事务 FlushMode属性的理解
- R语言-Knitr包的详细使用说明
- hdu oj 2012
- codeforce B. Road Construction
- Apache Drill: 大数据集互动分析的分布式框架
- 使用PL/SQL Developer连接oracle数据库报“无法解析指定的连接标识符”错误
- 关于spring+hibernate的FlushMode的记录
- 设计模式学习之装饰者模式
- Hadoop本地压缩库<转>
- Android Camera系列开发 (一): 通过Intent拍照
- 从新浪微博搜索站点中超大批量爬取新浪微博内容方法和核心源码(java)
- struts2的工作机制
- Maven库
- 浅析Android4.0 Animator框架
- 1. Rccp简明教程(关于R与C++的混合使用方法)