Если вы знаете тип сгенерированного исключения (допустим, это NPE), вы можете попробовать что-то вроде
@Override
@Transactional(rollbackOn=NullPointerException.class)
public methodOuter(){
//some processing
methodInner1();
methodInner2();
}
@Override
public methodInner1(){
//save something to db
}
@Override
public methodInner2(){
//some processing
//throws exception
}
В этом случае вам не нужно аннотировать «внутренние» функции. methodOuter будет откатываться, если выбрасывается исключение NullPointerException. Если вы хотите выполнить откат для каждого возможного исключения, вы должны изменить аннотацию на
@Transactional(rollbackOn=Exception.class)
Кстати: RuntimeExceptions вызовет откат независимо от того, аннотированы они или нет.