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类型,为防止以后开发时需要使用事务。

  • 相关阅读:
    GetDlgItem
    vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
    C #中的几个线程同步对象方法 zz
    vc中调用exe的方法
    函数PlaySound和sndPlaySound的用法
    Radio Button的使用
    用Event实现线程同步
    C++学习随笔之九:类和动态内存分配
    C++学习随笔之七:对象和类
    C++学习随笔之二:数据处理
  • 原文地址:https://www.cnblogs.com/kaifaxiaoliu/p/11980128.html
Copyright © 2011-2022 走看看