Определить, зафиксирована ли транзакция

#java #spring-boot #hibernate #spring-transactions

Вопрос:

В моем приложении я столкнулся со сценарием, в котором при вставке в БД возникало исключение времени выполнения, которое откатывало всю транзакцию, что и ожидалось.

Но как мы можем определить у контроллера, что, когда транзакция была успешно зафиксирована, был откат, чтобы отправить соответствующий ответ обратно.

Заранее спасибо.

Комментарии:

1. путем (попытки и) перехвата (/ любого) исключения во время выполнения… в вашем контроллере!?

2. если этого недостаточно, вы можете получить «полный контроль» над (текущей) транзакцией , но должны передать статус контроллеру…

3. Рассмотрите более чистый код с этим, вместо того, чтобы пытаться / перехватывать « @ControllerAdvice @RestController общедоступный класс RestExceptionHandler { @ResponseStatus(HttpStatus. INTERNAL_SERVER_ERROR) @Обработчик исключений(Exception.class ) public ResponseEntity<Строка> Обработчик исключений(исключение e, запрос веб-запроса) { log.error(request.getDescription(false)); log.error(HttpStatus. INTERNAL_SERVER_ERROR.getReasonPhrase() e.GetMessage(), e); возвращает новый ResponseEntity<>(e.toString(), HttpStatus. INTERNAL_SERVER_ERROR); «

4. Будет ли транзакция откатываться, если я явно создаю исключение во время выполнения?

Ответ №1:

вы можете получить статус текущей транзакции с помощью

 TransactionStatus status = TransactionAspectSupport.currentTransactionStatus();