В настоящее время мы сталкиваемся с проблемой, связанной с весенними транзакциями в нашем приложении.Как видите, в deleteRecord()
мы делаем операцию с БД.Но в следующей строке выдается бизнес-исключение.
Ожидаемое поведение (насколько мне известно): Операция БД должна быть откатана, так как исключение выдается из следующей строки
Фактическое поведение: Это не откат назад.Данные вставляются в таблицу
Вопрос: Почему транзакция не откатывается?Я не думаю, что это из-за блока catch, потому что deleteRecord()
будет выполняться в новой транзакции.Пожалуйста, поправьте меня, если я ошибаюсь
Код:
class A {
void myMethod() {
for(int i=0 ; i<count ; i++) {
try {
deleteRecord();
} catch(Exception e) {
log.error("Exception caught");
}
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
deleteRecord() throws Exception{
line 1 : deleting record
line 2 : Throwing business exception
}
}