Почему нам нужно перевести собственные исключения Hibernate в Spring DataAccessExceptio - PullRequest
0 голосов
/ 24 июня 2018

Я просматривал аннотацию @Repository, и было упомянуто, что она используется для перевода исключения, так что исключение Hibernate в Spring DataAccessException. Также нам нужно настроить следующий постпроцессор

<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /> 

Итак, мой вопрос: зачем нужен этот перевод Exception. Разве мы не можем обработать Native Exception напрямую?

Спасибо

1 Ответ

0 голосов
/ 24 июня 2018

Я думаю, что это сделано ради четкого разделения обязанностей.

В двух словах, DAO - это уровень, который заключает в себе всю работу с базой данных, а уровень Service - это место для размещения вашей бизнес-логики.

Если это так, знания о Hibernate или любом другом инструменте, связанном с базой данных, должны оставаться внутри DAO, и Service не должен ничего знать об этом.Если вы, например, решите перейти с Hibernate на, скажем, Jooq, или, в более общем смысле, решите сменить реляционную базу данных на что-то другое, возможно, на NoSQL, уровень обслуживания останется таким же, и изменится только реализация DAO.

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

Итак, Spring «предлагает» добавить гораздо более общее «DataAccessException»

Надеюсь, что это отвечает на ваш вопрос

...