@Transactional注解不生效

在Spring中,@Transactional注解失效,通过网上搜索,基本可以找到如下3个原因:

1、在同一个类中,没有@Transactional注解的方法去调用有@Transactional注解

2、@Transactional注解修饰的方法不是public的

3、抛出的异常为checked类型

但今天比较倒霉了,@Transactional失效,都不是以上3个原因。
还原一下当时的情形:

配置文件application.properties:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/dbgirl?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

User实体类:

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(unique = true)
    private String name;

    private String company;

    // 略去getter,setter 
}

Service方法:

@Component
public class DemoService {

    @Autowired
    UserDao userDao;

    @Autowired
    OperationLogDao operationLogDao;

    @Transactional
    public void addUser(String name){
        OperationLog log = new OperationLog();
        log.setContent("create user:" + name);
        operationLogDao.save(log);

        User user = new User();
        user.setName(name);
        userDao.save(user);
    }

}

本来想的很好,利用jpa自动生成数据库表结构,方便向users表插入记录。当重复插入同一个name的User时,会报Duplicate entry 的错误,然后导致回滚,但结果并没有。
后来搜了好久,才发现,mmp!

数据库里表的引擎是MyISAM,不支持事务处理。。关键在于application.properties中这一行配置:

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

将其修改如下

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

再重新生成表后,引擎变为Innodb,再调用addUser方法,报错以后,事务终于回滚了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,951评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 青田小可爱们: 好久不见!好想你们啊。收到了你们的来信,不能一一回信真的很抱歉啊。记得9.18...
    咦双眼皮董燕儿阅读 771评论 0 1
  • listen()函数仅有TCP服务器调用 #include int listen(int sockfd, int ...
    狗尾巴草败了阅读 804评论 0 0
  • 酒过三巡人烟散, 独处深山觅乾坤。 叶落孤空迹难寻, 惊闻庙中木鱼声。
    老林9911阅读 194评论 0 0