Глобальный обработчик исключений отменяет обработчик транзакций базы данныхJAVA

Программисты JAVA общаются здесь
Anonymous
Глобальный обработчик исключений отменяет обработчик транзакций базы данных

Сообщение Anonymous »

Я как бы застрял на одной забавной ошибке в REST-сервисе Quarkus, который я сейчас разрабатываю.
Мое приложение управляет сущностями размаха, и я реализовал некоторые операции CRUD в контроллере ресурсов.
Я отметил это контроллер с @Transactional(как предлагает документация) и на всякий случай я добавил глобальный обработчик исключений, который выглядит примерно как следующий фрагмент:

Код: Выделить всё

import jakarta.ws.rs.core.Response;
import org.jboss.resteasy.reactive.server.ServerExceptionMapper;

public class MyExceptionHandler {
@ServerExceptionMapper
public Response entityToBig(EntityToBigException e) {
return Response.status(Response.Status.BAD_REQUEST)
// ErrorMessage is just a record to hold the message
.entity(new ErrorMessage("Error", e.getMessage(), Response.Status.BAD_REQUEST.getStatusCode())).build();
}

//... other handlers
}
Дело в том, что если я выбрасываю исключение, которое обрабатывается моим классом ExceptionHandler, код состояния и сообщение предварительно заданы правильно для конечного пользователя, но изменения, сделанные в предыдущем запросе, ТАКЖЕ зафиксировано в базе данных!
Если я выдаю исключение, которое не обрабатывается моим классом ExceptionHandler, откат транзакции работает нормально...
Я не смог найти никакой другой документации по этой проблеме, поэтому я очень озадачен тем, как решить эту проблему/вручную сказать менеджеру транзакций, чтобы он откатил мои изменения.

Подробнее здесь: https://stackoverflow.com/questions/787 ... on-handler

Вернуться в «JAVA»