当前位置: 代码迷 >> 综合 >> 不同的接口掉同一個manager去save同一個表,無法插入行信息,@Transactional
  详细解决方案

不同的接口掉同一個manager去save同一個表,無法插入行信息,@Transactional

热度:22   发布时间:2023-12-04 20:37:02.0

现在要往我自己建的的表里插入一条数据,已经用manager封好了去调用rep,rep去调用bo转实体类,然后用mybatisplus去save实体类。
1.用controller调用usecase,调用service,调用manager,就可以成功插入这条数据
2.在另一个service里调用checksupport调用这个manager,就无法插入这条数据,报错:不存在该数据表(这个数据表应该在legal数据库中,但是报错报的是bpm数据库中不存在这个表)

原因:
2中的service中,调用checksupport的方法上面使用了注解@Transactional(rollbackFor = Exception.class),如果注释掉,就可以正常插入了。
原理是mysql的事务
但是显然不能通过注释这个注解的方式来正常调用,因为注释掉会影响其他的东西。

解决方案:
https://blog.csdn.net/qq_45126647/article/details/118091172

发现还是不行,参考上面的文章最终解决方案:
因为manager层调用的rep层,但是mybatisplus提供的save方法,是让rep层实现IService接口,从而提供了mybatisPlus的各种服务,rep层是mybatisplus的实现类,在实现类上加注解,不会作用到父类上,但是父类源码不能更改。所以解决方案有两种:
1.不使用mybatisplus的save方法,自己写一个
2.把@DS(‘legal’)和@Transactional(propagation = Propagation.REQUIRES_NEW)放到manager层中,调用rep的save的方法的方法上面。

  相关解决方案