由于spring的只读模式所引起的错误

使用的框架是ssh.

今天在使用hibernate的HibernateTemplate模板进行插入操作事报错了,错误如下:

Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition

意思是只读模式下写的操作是不允许的。

这是因为在spring中readonly这个属性默认是true,即默认是只读模式,所以我们要修改它的为false。

有两种方法:第一种是直接使用注解的方式,直接在DAO层的实现类上加上如下注释即可(在方法上添加也可以):

 

@Transactional(readOnly = false)

第二种是在配置文件里面配置readyonly为false

 

!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
 <!--事务的策略-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!--在这里配置read-only="false"-->
        <tx:method name="*"  propagation="REQUIRED" read-only="false" />
    </tx:attributes>
</tx:advice>
<!--事务的aop-->
<aop:config>
    <aop:pointcut expression="execution(* com.mysql.dao.*.* (..))"
                  id="mypointcut" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="mypointcut" />
</aop:config>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring中,只读事务和读写事务是两种不同的事务类型。只读事务用于查询操作,不允许对数据库进行修改操作,而读写事务则可以进行查询和修改操作。 如果需要在只读事务中添加写操作,我们可以通过以下步骤进行修改: 1. 确定是否真正需要在只读事务中进行写操作。由于只读事务的设计初衷是为了提高查询性能和并发度,将写操作加入其中可能会降低性能。 2. 在Spring事务管理配置文件(如XML配置文件或注解配置类)中,将只读事务的isolation属性设置为默认级别或其他适当的级别,以允许读写操作。例如,将isolation属性设置为READ_COMMITTED或其他适合的级别。 3. 在需要添加写操作的方法上,添加@Transactional注解或将@Transactional注解的只读属性设为false,这将将方法标记为读写事务。 4. 在方法中进行必要的修改操作,并确保在对数据库进行写操作之前,正确地处理事务的提交和回滚。 需要注意的是,在只读事务中添加写操作可能会引发一些问题。如果修改操作发生异常只读事务默认情况下将回滚事务。因此,在添加写操作时,必须确保在出现异常时正确处理事务的回滚和异常处理。 总之,如果需要在Spring只读事务中添加写操作,可以通过调整事务的隔离级别和在方法上添加@Transactional注解来实现。但是需要注意在这个过程中,适当处理事务的提交和回滚来确保数据的一致性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值