查看原文
其他

为什么加了@Transactional注解,事务没有回滚?

翟永超 程序猿DD 2020-10-16

点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!


在前天的《事务管理入门》一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有回滚。经过一顿沟通排查之后,找到了原因,在此记录一下,给后面如果碰到类似问题的童鞋一个参考。

问题原因

在前文的描述中,我漏了一个细节,其实在示例代码中,与之前拿的基础例子在配置中有一个关键属性没有提到,就是下面这个配置:

spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

这里的spring.jpa.database-platform配置主要用来设置hibernate使用的方言。这里特地采用了MySQL5InnoDBDialect,主要为了保障在使用Spring Data JPA时候,Hibernate自动创建表的时候使用InnoDB存储引擎,不然就会以默认存储引擎MyISAM来建表,而MyISAM存储引擎是没有事务的。

所以,如果你的事务没有生效,那么可以看看创建的表,是不是使用了MyISAM存储引擎,如果是的话,那就是这个原因了!


除此之外,对于事务没有生效的可能还很多,比如,在同一个类中定义又调用等。这里就不具体展开了,欢迎读者留言分享你碰到的事务失效的情况!


往期推荐

王者归来:分布式调度解决方案 ElasticJob 重启!

面试:说说啥是一致性哈希算法?

Spring Boot 2.x基础教程:事务管理入门

Java 语言中十大“坑爹”功能!

说实话,Intellij IDEA 自带的 Vim 插件真心不错!


关注下方公众号,回复“2020面试

免费获取2020年最新面试题

一起进大厂,每日学干货

关注它,不迷路

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存