У меня есть два метода, показанных ниже.
@Transactional
public void methodA(){
logger.trace("Executing methodA");
methodB()
logger.trace("Executing methodA completed");
}
public void methodB(){
//other codes here
try{
staffDao.queryById(1) //Fetch a record from database
}catch(EmptyResultDataAccessException e){
logger.trace("Staff does not exists")
}
//other codes here
}
Когда происходит EmptyResultDataAccessException
в methodB()
, вся транзакция, начатая methodA()
, откатывается, за исключением следующего:
org.springframework.transaction.UnexpectedRollbackException: транзакция отменена, поскольку она помечена как доступная только для отката
Я знаю, что это поведение аннотации spring @Transactional
по умолчанию.
В моем случае мне нужно зафиксировать транзакцию, даже если есть EmptyResultDataAccessException
. Поскольку EmptyResultDataAccessException
является RuntimeException
, я не могу использовать атрибут noRollBackFor
аннотации @Transactional
.
Кто-нибудь может предложить решение?