最近用SpringBoot+JPA学习数据库事务管理,在ServiceImplement的实现方法里配置好了rollbackFor,
@Transactional(rollbackFor = {IllegalArgumentException.class})
@Override
public TestPerson saveTestPersonWithRollBack(TestPerson testPerson) {
TestPerson person = testRepository.save(testPerson);
if (testPerson.getName().equals("tester")) {
throw new IllegalArgumentException("已经存在同名的人啦,回滚一哈...");
}
return person;
}
但是测试时候一直无法回滚事务,百思不得其解之后只能网上求助,最后发现是使用JPA自动生成的表(用的是MySQL)的存储引擎是MyISAM(MySQL存储引擎链接:https://my.oschina.net/junn/blog/183341),这个是不支持事务的。
解决方法:修改表的存储引擎为InnoDB就可以了(alter table test_person engine=innoDb;)。
提供思路的帖子,Mark一下:
@Transactional注解不回滚不起作用无效,转载自:http://www.voidcn.com/article/p-bozwatyd-st.html
关闭mysql自动提交------关于mysql自动提交引发的惨剧,转载自http://blog.csdn.net/sd4015700/article/details/16842931