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设置的字符长度超过数据库表字段要求的长度,本应该两条数据都不插入,可是,还是有一条插入了,另一条抛出异常。
后来发现,我在配置文件中设置了
在这里插入图片描述
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值