#hibernate
#спящий режим
Вопрос:
У меня есть API с weblayer (контроллером), прикладным и сервисным уровнями. Запуск транзакции на уровне приложения @Transactional (только для чтения = false). При вызове API он добавляет строку (распространение = REQUIRES_NEW) в БД и в конце выполнения обновляет (распространение = REQUIRES_NEW) ту же запись. При обновлении я получаю ошибку сохранения (преднамеренную), которую я улавливаю и преобразую в ответ. После отладки я увидел, что ответ правильно формируется на уровне сервиса и отправляется обратно на уровень приложения. Но при возврате ответа от службы на веб-уровень он выдает «org.springframework.transaction.UnexpectedRollbackException «. пожалуйста, дайте мне знать, если потребуются какие-либо дополнительные данные.
ПРИМЕЧАНИЕ: приложение не имеет никакой реализации, кроме аннотации «@Transactional (только для чтения = false)», я просто возвращаю уровень службы формы ответа на веб-уровень через уровень приложения.
Комментарии:
1. Вы имеете в виду ошибку сохранения, как в
javax.persistence.PersistenceException
? Вы перехватываетеPersistenceException
внутри исходной@Transactional(readOnly = false)
транзакции? Если это так, попробуйте перехватить ее внутри транзакции «обновить» и повторно создать другое проверенное исключение2. @crizzis спасибо за ответ, ранее я перехватывал PersistenceException и выбрасывал его как исключение из режима гибернации, что не сработало. Согласно вашему предложению я перехватил исключение и выдал его как SQLException (проверенное исключение), оно не работает. Все еще можно увидеть необнаруженное исключение отката