如何修改spring源码
小弟刚学ssh没多久,做一个ssh的小运用当热手,但是使用spring管理事务之后加入了OpenSessionInViewFilter,批量操作删除的时候,却报错:ERROR - Servlet.service() for servlet default threw exception
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
在网上搜了下,需要修改spring的OpenSessionInViewFilter类的getsession()和closesession()方法才行,但是spring的源码却找不到在哪个位置.
我应该怎么做呢,请大家指教?
不胜感激!!!
这不是spring的问题,应该是你那里设置错了。
我也经常遇见这种问题,分析一下操作过程中的事物状态,很好解决的。
ps:我一般事务代理喜欢用申明式事务,我方法起名都不规范。
事务配置是用的readOnly.....
你大概某个方法名起错了.
你的批量删除的方法是readOnly的,只能做查询.
可以在配置文件中找到事务代理TransactionProxyFactoryBean的属性transactionAttributes下的
[code="java"]
PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED,-Exception
PROPAGATION_REQUIRED,readOnly
[/code]
把你对应的方法的值的readOnly去掉