Почему нам нужно переводить исключения Native Hibernate в Spring DataAccessExceptio

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

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

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

Спасибо,

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

JB Nizet 24.06.2018 09:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
256
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

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

Итак, Spring "предлагает" выбросить более общее исключение DataAccessException.

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

Спасибо, Марк, теперь я довольно ясно понимаю использование аннотации репозитория.

Manish 24.06.2018 09:44

Другие вопросы по теме