关于java事务回滚问题

代码结构这是一个调用第三方接口的方法
rollback=“Exception.class”
总方法{
调用其他方法
操作数据库
}

rollback=“Exception.class”
其他方法{
操作数据库
}

我的问题是
1.如果在其他方法出现错误会触发哪个回滚
2.总方法出现错误触发回滚,回滚的包括其他方法中操作的数据库数据吗

首先明确一个前提,调用总方法,调用其他方法都是用的spring注入的对象来调用的

  1. 其他方法出现错误, 首先其他方法里的数据库操作会出现回滚;在总方法中,由于先调用了其他方法,也没有其他数据库操作了,所以只有其他方法的数据库操作会回滚
  2. 总方法出现错误,如果是在 总方法的操作数据库之后出现,那么其他方法的数据库操作 和 总方法的数据库操作都会回滚。 它们其实在运行时都是获取的同一个事物,所以出现错误,两个都会回滚相关数据库操作
  1. 如果在其他方法中出现异常,会触发其他方法的回滚。

  2. 如果在总方法中出现异常,会触发总方法的回滚。如果你希望回滚包括其他方法中操作的数据库数据,则需要在其他方法中也添加回滚注解,并将其他方法调用放在同一个事务中。

例如:

@Transactional(rollbackFor=Exception.class)
public void mainMethod() {
  // 调用其他方法
  otherMethod();
  // 操作数据库
  ...
}

@Transactional(rollbackFor=Exception.class)
public void otherMethod() {
  // 操作数据库
  ...
}

在上述代码中,如果在其他方法或总方法中出现异常,就会触发回滚,并回滚其他方法中操作的数据库数据。

看你调用其他方法的方式,如果导致事务失效了就只能触发总方法的回滚,总方法回滚会回滚其他方法内的数据操作,但前提是你用的是默认的事务传播

1.如果在其他方法出现错误 会触发其它方法的回滚方法
2 .总方法出现错误触发回滚 会回滚总方法中涉及到的数据,包括其它方法的

望采纳

1.如果在其他方法出现错误会触发哪个回滚
其他方法是指其他服务的方法,如果你没有分布式事务,只能触发其他方法那里的数据库回滚
2.总方法出现错误触发回滚,回滚的包括其他方法中操作的数据库数据吗
跟第一个问题一样,没有分布式事务保证,就只会回滚总方法的数据库