解决在HibernateTemplate下进行junit测试时,无法增、删、改的问题

 

在dao实现类中继承了HibernateDaoSupport,使用HibernateTemplate进行增删改查操作,编写测试类测试时,

查询操作成功,其余均失败

报错:

org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.MANUAL):

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

错误信息很好理解,就是不要在设置了只读的情况下进行增删改操作

 

检查spring配置文件,其中只对service包下进行事务管理,即没有对测试类进行事务管理

在这种情况下(其他情况:如果操作方法的名称和事务策略中指定的被管理的名称不能够匹配上),

  spring 就会采取默认的事务管理策略(PROPAGATION_REQUIRED,read only).如果是插入和修改操作,就是不被允许的

在测试方法上,添加@Transactional(readOnly=false)注解,设置为可写

 

这样的话,程序不再报错,提示许多信息,然后就没有然后了。。。

在提示信息的最后一行,发现:

  Rolled back transaction for test context

可以通过在dao实现类方法中使用:this.getHibernateTemplate().flush();

控制台可以打印相关sql语句

由此,判断事务是自动回滚了

所以使用JUnit 测试hibernate 事务管理的时候应注意 ,测试类完成是默认回滚的

 

由于在hibernate中不想设置自动提交事务,HibernateTemplate中也没有提供提交事务的方法

使用注解提交, @Rollback(false)

 

所以,只需在测试方法上加上下面三个注解

@Test
@Transactional(readOnly=false)
@Rollback(false) 

就可以进行测试了,而不需要改动任何配置文件。

 

 

转载于:https://www.cnblogs.com/NextLight/p/8639105.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值