SpringBoot@Transactional注解失效

我们用@Transactional注解标注方法开启事务时,测试的时候事务并没有生效。
这是service层的代码,开启事务,并且插入两条数据

@Service
public class GirlService {
    @Autowired
    private GirlRepository girlRepository;
    @Transactional
    public void saveTwo(){
            Girl girlOne = new Girl();
            girlOne.setCupSize("D");
            girlOne.setAge(55);
            girlRepository.save(girlOne);
            Girl girlTwo = new Girl();
            girlTwo.setCupSize("A");
            girlTwo.setAge(14);
            girlRepository.save(girlTwo);
    }
}

这是Controller层,调用service层的方法

@PostMapping(value = "/girls/two")
    public void saveTwo(){
        girlService.saveTwo();
    }

比如我在service层把cupSize设置的字符长度超过数据库表字段要求的长度,本应该两条数据都不插入,可是,还是有一条插入了,另一条抛出异常。
后来发现,我在配置文件中设置了
SpringBoot@Transactional注解失效_第1张图片
ddl-atuo :update
也就是springboot帮我们根据实体类创建的表,这个表呢默认的引擎不是inoodb,而是MyISAM,哈哈,现在知道原因了吧,myisam不支持事务,所以我们把表的引擎改为innodb,所有的问题就解决了,事务也生效了。
附上查看数据库表引擎的语法:
会查询所有表的引擎

show table status;

结果
在这里插入图片描述
查看数据库某个表的引擎

show table status from db_name where name='table_name';

结果
在这里插入图片描述
修改表引擎

alter table tablename engine innodb;

你可能感兴趣的:(#,Spring,#,SpringBoot)