16

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

 4 years ago
source link: http://blog.didispace.com/transactional-not-rollback/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

问题原因

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK