zoukankan      html  css  js  c++  java
  • Spring Boot使用事务不起作用

    今天使用spring boot做关于事务的demo时发现在service层使用@Transactional注解运行之后遇到错误并不能回滚。

    @Service
    public class HelloController {
    
    
        @Autowired
        private StudentRepon studentRepon;
    
        @Transactional
        public void hello(){
    
            Student s=new Student();
            s.setName("lllll");
            s.setSex("1");
    
            studentRepon.save(s);
    
            Student ss=new Student();
            ss.setName("lllll");
            ss.setSex("11111");
    
            studentRepon.save(ss);
        }
    }


    按照思路应该是第一次保存数据库会成功,但是第二次保存数据库时会失败,最后会进行事务回滚将第一次插入的数据也回滚过来,结果发现每次都是能够将第一次的数据插入。

    在网上找信息,有的说是在spring boot的启动类上加上@EnableTransactionManagement注解,但是我的最后并不能解决我的问题,最后在一篇文章中发现好像是我的mysql数据库表创建的类型有问题。


    mysql的表是有事务安全( 比如:InnoDB)和非事务安全(比如:ISAM、MyISAM)之分的

    于是赶紧去查看我的数据库表,结果发现我的数据库表果然不是InnoDB类型的,我的是MyISAM类型的,压根就不支持事务,代码写的没问题也不行呀,所以将数据库表的类型修改为InnoDB类型的,再次尝试就没问题了。

    下面是我使用Navicat进行修改表类型的步骤:



    针对这种情况,所以说在创建数据库表的时候就应该设置为InnoDB类型,为防止以后开发时需要使用事务。

  • 相关阅读:
    qq互联接入
    react-markdown-editor-lite 编辑器
    验证码
    vue 3的生命周期 html 的
    如何利用github搭建个人网站
    unittest系统(四)测试套件
    unittest系列(三)unittest用例如何执行
    unittest系列(二)unittest的断言
    unittest系列(一)unittest简介和示例
    命令行开启wsl并安装调试python项目
  • 原文地址:https://www.cnblogs.com/kaifaxiaoliu/p/11980128.html
Copyright © 2011-2022 走看看