周报9.19-9.25异常org.springframework.dao.InvalidDataAccessApiUsageException的处理
2016-09-28 16:13
239 查看
昨天在写service时遇到这个问题,org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove ‘readOnly’ marker from transaction definition.
网上查找方法是,直接修改OpenSessionInViewFilter过滤器的配置,配置过滤器的时候配置时候直接指定flushMode。采用下面的方式即可:代码如下: 在web.xml文件中添加如下代码:即可解决延迟加载与上面的错误信息
但是不太懂其意思,而且修改后还是不行,后来经过同事指点终于找了问题的所在,问题出在spring配置文件,applicationContext.xml文件里。
找到这一段
我的service配置都继承自这个class,而这里定义了方法的命名和事务读取的规则,意思是不以save,add,remove,delete,del,update,renew,开头命名的方法,只有只读权限,所以我那个方法因为不符合规则,失去了对数据库的写权限,导致报这个错,解决方法也就很清晰明了了。
对需要写数据库操作的方法用上面规则命名方法或将“几行的readOnly去掉,你可以自由命名(但由于这是公司项目,动全局文件会有未知隐患,所以我选择约束自己的命名方法)。
public void requestData(){ UaasUser user = new UaasUser(); user.setLoginName("test"); user.setPassword("111111"); user.setStatus(1); user.setName("test"); user.setSexCode("1"); uaasUserDAO.save(user);//出错句 }
网上查找方法是,直接修改OpenSessionInViewFilter过滤器的配置,配置过滤器的时候配置时候直接指定flushMode。采用下面的方式即可:代码如下: 在web.xml文件中添加如下代码:即可解决延迟加载与上面的错误信息
<filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenS essionInViewFilter </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>
但是不太懂其意思,而且修改后还是不行,后来经过同事指点终于找了问题的所在,问题出在spring配置文件,applicationContext.xml文件里。
找到这一段
<bean id="basicTxProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="renew*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop> <prop key="load*">PROPAGATION_SUPPORTS,readOnly</prop> <prop key="get*">PROPAGATION_SUPPORTS,readOnly</prop> <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop> </props> </property> </bean>
我的service配置都继承自这个class,而这里定义了方法的命名和事务读取的规则,意思是不以save,add,remove,delete,del,update,renew,开头命名的方法,只有只读权限,所以我那个方法因为不符合规则,失去了对数据库的写权限,导致报这个错,解决方法也就很清晰明了了。
对需要写数据库操作的方法用上面规则命名方法或将“几行的readOnly去掉,你可以自由命名(但由于这是公司项目,动全局文件会有未知隐患,所以我选择约束自己的命名方法)。
相关文章推荐
- (实战)创建SelectedItems处理方法
- 我们怎样处理垃圾网站举报?
- Sqlserver 处理大容量导入导出问题
- 批处理文件中获取当前所在路径的几种方法
- MDX中一些边界问题的处理
- BW:SID冲突:问题描述及处理 By Greed_zy
- IDES4.7过期问题的处理
- 利用 IHttpHandler 自定义 HTTP 处理程序
- 套接口编程理论基础:处理SIGCHLD信号
- BitVisor中外部中断的处理流程浅析
- java日志处理组件log4j--log4j.xml配置详解
- wxPython的事件处理
- C#字符串处理机制——作业
- 编译2008批处理
- 循环引用的处理
- Android中的Bitmap、Drawable、Byte[]、String、之间的转换及图像简单处理
- MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)
- Android多线程及异步任务消息处理机制(一)--Handler的使用
- ACM经典算法之字符串处理:字符串截取
- Java异常处理,SimpleDateFormat中的parse函数操作