数据库无法关联外键,springboot事务不生效

springboot事务不生效


1.首先springboot事务回滚不生效,通常是service实现类抛出异常,controller捕获,并设置手动提交事务

1.serviceImpl代码

 @Transactional(rollbackFor = Exception.class)
    public int SaveAs(String UserId,Long Pid,String PName) throws Exception {
       try{ //查询原有项目的信息
        ProjectMessage message = projectMessageService.queryProjectMessage(UserId, Pid);
        //插入工程项目信息
        message.setUserId(UserId);
        message.setPName(PName);
        message.setPid(null)}catch (Exception e){
           throw new Exception();
       }
        return 0;
    }

首先在你要在springboot启动类上加 @EnableTransactionManagement 注解,开启事务支持,之后在你要用事务的方法上加入 @Transactional(rollbackFor = Exception.class) 注解,把要执行代码放到try里面,并catch捕获异常(也可以加在类上表示这个类的所有方法的支持事务)

2.controller代码

    @GetMapping("/SaveAs")
    @Transactional(rollbackFor = Exception.class)
    public Result<?> SaveAs(@RequestParam String UserId, @ApiParam("新起的项目名字")@RequestParam String PName,@ApiParam("要复制的项目ID") @RequestParam Long Pid) throws InterruptedException {
        try {
            uaProjectService.SaveAs(UserId, Pid, PName);
        } catch (Exception e) {
            //事务回滚
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return Result.error("1","另存为失败,请重试");
        }
        return Result.success();
    }

之后在controll先加上 @Transactional(rollbackFor = Exception.class) 注解,然后对service的事务方法进行try catch捕获异常,在catch里回滚事务

2.如果你前面都对了然后测试的时候事务还是不回滚,放心这不是你的问题是数据库的问题

​ 1.首先数据库的引擎在5.7之后都默认是InnoDB的,他是支持事务和外键的,这里我用nacivate演示

在这里插入图片描述

在这里插入图片描述

这样你再试试是不是可以了,如果还是不行,那我就不知道了(注意我这里使用phpStuudy自带的数据库,它自带的引擎是Mylsam既不能建立外键也不支持事务,可以修改一下,以防下次再出现这种问题)

3.PhpStudy数据库修改

在这里插入图片描述

在这里插入图片描述

总结

事务不生效,首先看看代码是否有错误,之后查看数据库,这样问题应该就能解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值