Обработка исключений Hibernate в Spring декларативном управлении транзакциями - PullRequest
0 голосов
/ 26 августа 2011

Я использовал подход декларативного управления транзакциями PROPAGATION_REQUIRED для моего приложения Spring + Hibernate + Struts.Я могу поймать StaleObjectException (предназначено) в месте, где сделан сервисный вызов (где начинается транзакция).В методе службы есть вложенные вызовы Foo1, Foo2, Foo3, которые выполняют обновления.Я хочу поймать исключение в этих методах.Как я могу это сделать?Любые альтернативы или обходные пути?

1 Ответ

4 голосов
/ 26 августа 2011

Вы не должны ловить это исключение.Из справочной документации Hibernate :

Если Session выдает исключение, включая любое SQLException, немедленно откатите транзакцию базы данных, вызовите Session.close () и отбросьте экземпляр Session.Определенные методы сеанса не оставят сеанс в согласованном состоянии.Никакое исключение, выброшенное Hibernate, не может рассматриваться как восстанавливаемое.

Это означает, что кроме перехвата исключения или его преобразования в другой тип исключения, перехват исключения не поможет вам: использованиесеанс после не будет работать должным образом.

См. Как работать с блокировками (JPA)? для другого вопроса, где обсуждается обработка исключений оптимистической блокировки.

...