今天使用spring boot做关于事务的demo时发现在service层使用@Transactional注解运行之后遇到错误并不能回滚。
@Service
public class HelloController {
@Autowired
private StudentRepon studentRepon;
@Transactional
public void hello(){
Student s=new Student();
s.setName("lllll");
s.setSex("1");
studentRepon.save(s);
Student ss=new Student();
ss.setName("lllll");
ss.setSex("11111");
studentRepon.save(ss);
}
}
在网上找信息,有的说是在spring boot的启动类上加上@EnableTransactionManagement注解,但是我的最后并不能解决我的问题,最后在一篇文章中发现好像是我的mysql数据库表创建的类型有问题。
mysql的表是有事务安全( 比如:InnoDB)和非事务安全(比如:ISAM、MyISAM)之分的
于是赶紧去查看我的数据库表,结果发现我的数据库表果然不是InnoDB类型的,我的是MyISAM类型的,压根就不支持事务,代码写的没问题也不行呀,所以将数据库表的类型修改为InnoDB类型的,再次尝试就没问题了。
下面是我使用Navicat进行修改表类型的步骤:
针对这种情况,所以说在创建数据库表的时候就应该设置为InnoDB类型,为防止以后开发时需要使用事务。