Java Spring@Transactional-我可以覆盖rollboor吗

Java Spring@Transactional-我可以覆盖rollboor吗,java,spring,transactions,rollback,Java,Spring,Transactions,Rollback,我正在调用具有以下注释的服务: @Transactional(rollbackFor=ExceptionA.class) public void myMethodA(....) throws ExceptionA { . . } 我从另一个Springbean中的另一个方法调用这个方法 @Transactional(rollbackFor=ExceptionB.class) public void mainEntryPointMethod(....) throws ExceptionB { .

我正在调用具有以下注释的服务:

@Transactional(rollbackFor=ExceptionA.class)
public void myMethodA(....) throws ExceptionA {
.
.
}
我从另一个Springbean中的另一个方法调用这个方法

@Transactional(rollbackFor=ExceptionB.class)
public void mainEntryPointMethod(....) throws ExceptionB {
.
  try {
    myMethodA()
  }
  catch (ExceptionA exp) {
   .
  }


.
}
我的问题是,如果myMethodA抛出异常,我的事务(默认情况下从mainEntryPointMethod->myMethodA传递)将被标记为回滚。是否有一种方法可以重写内部方法的“rollbackor”

提前谢谢 克里斯

解决方案#1 您可以指定正在调用的方法获取其自己的事务。 可以通过注释该方法来实现这一点

 @Transactional(propagation = Propagation.REQUIRES_NEW)
这样,如果方法(myMethodA)标记为回滚,则只回滚该事务,而不回滚调用方事务

只有在允许被调用方法管理自己的事务并且不想回滚调用方事务的情况下,这才有效

解决方案#2
也许您可以尝试对事务注释属性进行子类化和更改。

这可能取决于底层事务协调器及其处理嵌套的方式。不过我猜这行不通。谢谢你的回答,阿尔弗雷多。好吧,这是一种可能性,但是我想在不修改服务方法的情况下这样做。我希望将被调用的方法(myMethodA)保留为默认传播(必需),这样,如果从其他地方调用它,它将在出错时回滚。当我从“mainEntryPointMethod”调用它时,我希望它的行为有所不同。(如果可能的话,始终如此)。