在开发过程中你是否遇到过这样的问题,当在Controller中调用Service中A()方法,A方法内部又调用Service中B()方法,由于A方法中只有查询操作所以没有加事务控制,B方法中含有多次修改操作所以增加了@Transactional注解,结果在A方法调用完B方法后,程序报错了,但是B方法中修改操作的数据竟然成功了,这是什么鬼,必须开启了探索Spring事务之路,直接上示例。
A方法无事务,B方法加事务
@RestControllerpublic class Controller{ @Autowired private StudentcardService studentcardService; @RequestMapping(value = "/test/{id}}", method = RequestMethod.GET) public Response queryStudentCard(@PathVariable("id") String id) { studentcardService.updateA(id); }}
@Servicepublic class StudentcardServiceImpl implements StudentcardService { @Resource private StudentCardMapper studentCardMapper; @Override public void updateA(String id) { //先去调用内部方法B this.updateB(id); StudentCard sc =new StudentCard(); sc.setScId(id); //修改问题字段 sc.setQuestion("AAAAA"); studentCardMapper.update(sc); } @Override @Transactional public void updateB(String id) { StudentCard sc =new StudentCard(); sc.setScId(id); //修改答案字段 sc.setAnswer("BBBBB"); studentCardMapper.update(sc); //修改完数据后报错 double i=1/0; }}
访问后执行结果如下:
![fdbde80d331ef8927617609146d2f66a.png](https://img-blog.csdnimg.cn/img_convert/fdbde80d331ef8927617609146d2f66a.png)