org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read

这是自己遇到一个困扰很久的问题:

问题描述:就是在一个serviseimpl中使用保存相关方法时出现此类错误

控制台错误信息:

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.
    at org.springframework.orm.hibernate3.HibernateTemplate.checkWriteOperationAllowed(HibernateTemplate.java:1186)
    at org.springframework.orm.hibernate3.HibernateTemplate$18.doInHibernate(HibernateTemplate.java:770)
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdateAll(HibernateTemplate.java:768)
    at ins.framework.dao.EntityDaoHibernate.saveAll(EntityDaoHibernate.java:154)
    at *.service.spring.*ServiceSpringImpl.query*(*ServiceSpringImpl.java:150)
    at *.service.spring.*ServiceSpringImpl$$FastClassByCGLIB$$b4e294cf.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)

以上*号为自己添加

问题原因:

出现此问题的原因在于项目的事务配置拦截了query类的方法

*ServiceSpringImpl相关方法实现时,此方法名以query开头了,因此会拦截

解决办法:

1.在使用的方法前后填写两句话:

this.getSessionFactory().getCurrentSession().setFlushMode(FlushMode.AUTO);        
        super.saveAll(teamAssessTrackListSave);
   this.getHibernateTemplate().flush(); 

2.当然就是将方法名称改一下就好了啊!

希望对大家有帮助,小弟才识浅薄,只能说表面的了,能解决问题就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值