Connection is read-only. Queries leading to data modification are not allowed

错误原因是,使用spring配置了事物。配置如下:

      <!-- 定义哪些方法需要执行事务 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">  
        <tx:attributes>  
            <tx:method name="get*" read-only="true" />  
            <tx:method name="query*" read-only="true" />  
            <tx:method name="find*" read-only="true" />  
            <tx:method name="load*" read-only="true" />
            <tx:method name="select*" read-only="true" />
            <!-- 指定目标方法采用哪种事务管理 -->
            <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />  
        </tx:attributes>  
    </tx:advice>

 

因此如果在类似 get*方法中执行update操作的话,就会报“Connection is read-only. Queries leading to data modification are not allowed”的异常。

 

解决方法加事务(@Transactional)

 

@Override
@Transactional
public void deleteReward(final Long offerId) {
    final List<Reward> rewardList = rewardDao.findByOfferId(offerId);

    if (rewardList == null || rewardList.size() == 0) {
            throw new RewardNotFoundException("Reward not found");
    }

    rewardDao.deleteByOfferId(offerId);
}

 

 

猜你喜欢

转载自youyu4.iteye.com/blog/2300786