Write operations are not allowed in read-only mode错误
2015-10-21 17:50
393 查看
(转+作者个人理解) 最近在配置 Structs, Spring 和Hibernate整合的问题: 开启OpenSessionInViewFilter来阻止延迟加载的错误的时候抛出了这个异常: org.springframework.dao.InvalidDataAccessApiUsageException错误 但是在我们开启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: 直接修改OpenSessionInViewFilter过滤器的配置,配置过滤器的时候配置就是在一般的配置里面加上下面蓝色部分就可以了,直接指定flushMode的配置就OK了: 下面是配置文件:(web.xml) [html] view plaincopyprint? <filter> <filter-name>OpenSessionInViewFilter</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> <filter-mapping> <filter-name>OpenSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 解决方法2: 就是配置事务的边界,在你方法的执行时配置事务边界! 下面是sessionFactor.xml配置: [html] view plaincopyprint? <!-- 事务的配置 --> <!-- sessionFactory 为自己配置 sessionFactory 的 bean--> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <aop:config> <!-- execution(public * *.*.*..*.*(..)) 为自己项目中操作数据库中的方法 --> <aop:pointcut id="**" expression="execution(public * *.*.*..*.*(..))" /> <aop:advisor pointcut-ref="**" advice-ref="txAdvice" /> </aop:config> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!-- name 为 方法名 --> <tx:method name="**" read-only="true" /> <tx:method name="**" propagation="REQUIRED"/> </tx:attributes> </tx:advice> 下面是总结: 原理:因为配置openSessionInView时,启动后他默认是给没有配置 事务的加强处理(包括注解型事务) 的方法都默认为只读的,所以在插入数据时就会报上面的错
相关文章推荐
- Karaf 依赖equinox and felix,karaf 本Apache的很多项目作为基础框架
- CentOS7.1安装配置Apache+PHP+MySQL+PHPMyAdmin+Zend debugger
- 在Linux CentOS 6.6上安装Python 2.7.9
- OpenCV (insufficient memory in function cvAlloc)的解决办法
- Linux系统C语言读写文件总结 (一)
- linux驱动为自定义设备添加poll方法
- Linux 基于WEB开源的系统管理工具webmin
- linux服务器下验证码老是失败
- 通过shell脚本删除代码里面定义但未使用的变量
- <学习笔记>property和constructor-arg的使用
- Opencv Mat的操作
- 监控应用服务器使用JMX监控Tomcat (推荐)
- Apache中 RewriteRule 规则参数介绍
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- linux spi架构分析(一)
- Nginx and Apache的重写配置来支持html5的state跳转
- openssh服务以及基于ssh的双机互信配置
- Linux中安装并配置SVN
- Zabbix 监控LVS连接的状态
- Zabbix 监控LVS连接的状态