Поскольку вы используете @Transactional
, мы можем с уверенностью предположить, что вы выполняете операции с базой данных через Spring, Hibernate или другие обертки JDBC. Эти обертки JDBC обычно не выдают проверенные исключения, они вызывают исключения во время выполнения, которые обертывают типы JDBC SQLException
.
@Transactional
- это настройка отката по умолчанию только при выделении непроверенного исключения.
Рассмотрим случай использования как так
@Transactional
public void persistAndWrite(Bean someBean) throws IOException{
getSession().save(someBean); // DB operation
someFileService.writeToFile(someBean); File IO operation which throws IOException
}
Вы не обязательно хотите откатить операцию DB только потому, что мы не могли бы написать что-то в файл.
Аналогично
@Transactional
public void persistAndThrowOutOfMemory(Bean someBean) {
getSession().save(someBean); // DB operation
someService.hugeOperationThrowsOutOfMemoryError(); // consumes all memory, throws OutOfMemoryError
}
Вы не обязательно хотите откатить сохраненный объект только потому, что некоторые службы вызывают слишком много памяти для потребления.
@Transactional
дает вам возможность. Используйте его там, где это необходимо.
Это полезная информация. Благодарю. –