powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate - cохранение объекта
12 сообщений из 37, страница 2 из 2
Hibernate - cохранение объекта
    #39302627
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Основная идея - привести DAO(JDBC) и DAO(Hibernate) к общему знаменателю, чтобы при подмене одного на другой не пришлось ничего меня в сервисе и контроллере. Для этих целей введены два новых исключения, расширяющие стандартные спринговые и более точно характеризующие ошибки.
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302653
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaОсновная идея - привести DAO(JDBC) и DAO(Hibernate) к общему знаменателю, чтобы при подмене одного на другой не пришлось ничего меня в сервисе и контроллере. Для этих целей введены два новых исключения, расширяющие стандартные спринговые и более точно характеризующие ошибки.
это у вас программисты сами себе такие задачи могут ставить?
По задаче - "Эх, нету на вас руководителя проекта со сроками").
По сабжу я привёл выше:
У DAO(Хибера) нет ошибок в виде райзе в стандартной многопользовательской работе (веб проект).
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302662
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123У DAO(Хибера) нет ошибок в виде райзе в стандартной многопользовательской работе (веб проект).А теперь переведите эту фразу на русский?
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302676
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myaucha,
может с тебя начнём?
Я спросил, при каком юз кейсе или ВИ у тебя происходит райзе.
Или у тебя академическая задача?
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302682
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myaucha,
насколько в курсе, спринг УЖЕ сделал вместо SQLExeption свои :
------------------
CannotAcquireLockException CannotSerializeTransactionException CleanupFailureDataAccessException ConcurrencyFailureException DataAccessException DataAccessResourceFailureException DataIntegrityViolationException DataRetrievalFailureException DeadlockLoserDataAccessException EmptyResultDataAccessException IncorrectResultSizeDataAccessException IncorrectUpdateSemanticsDataAccessException InvalidDataAccessApiUsageException InvalidDataAccessResourceUsageException OptimisticLockingFailureException PermissionDeniedDataAccessException PessimisticLockingFailureException TypeMismatchDataAccessException UncategorizedDataAccessException
-----------
это мало?
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302683
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Я не отвечаю, когда обращение идет на ты, так что закончили дискуссию
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302687
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaЯ не отвечаю, когда обращение идет на ты, так что закончили дискуссию
О, как.
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302694
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myaucha,
вики))
авторВ русском языке обращение «на вы» постепенно вошло в употребление с XVIII века из-за сильного влияния французского языка и культуры, прежде всего в кругах аристократии. Существуют теории, что исконно «вы» было обращением к врагу.
Удачи!
Работайте!
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39302840
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не теория: "Иду на вы" - послание князя Святослава, которому было лень гоняться за разрозненными отрядами
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39303428
fsharp_fsharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaОсновная идея - привести DAO(JDBC) и DAO(Hibernate) к общему знаменателю, чтобы при подмене одного на другой не пришлось ничего меня в сервисе и контроллере. Для этих целей введены два новых исключения, расширяющие стандартные спринговые и более точно характеризующие ошибки.

правильно. только это не расширение. это изоляция слоев, чтобы ожидаемые DAO-исключения (конкурентный доступ, уникальность, FK и т.п.) не вылезали туда, куда им не стоит
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39303709
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fsharp_fsharpправильно. только это не расширение. это изоляция слоев, чтобы ожидаемые DAO-исключения (конкурентный доступ, уникальность, FK и т.п.) не вылезали туда, куда им не стоитВне зависимости от того, как это назовешь стандартная трансляция исключений в spring-е не до конца продумана.

Приведу пример. Предположим ни в DAO, ни в сервисе я не перехватываю исключений (то есть не подменяю своими, а использую стандартные спринговые) и делаю обработчик в контролере. Пусть у нас есть два DAO - для JDBC и для Hibernate. Пусть есть некая таблица в БД, в которой помимо первичного ключа еще два поля (например, user_name и email) должны быть уникальны. Тогда при нарушении уникальности на поле user_name в контроллер вернутся следующие исключения (предполагается, что имена ограничений в БД имеют семантический смысл и могут быть распарсены):

DAO-JDBC:
org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [insert into user_t (user_id, user_name, password, role_id, birthday, email) values (seq_id.nextval, ?, ?, ?, ?, ?)]; ORA-00001: нарушено ограничение уникальности (THIRD.USER$U$USER_NAME); nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: нарушено ограничение уникальности (THIRD.USER$U$USER_NAME)

DAO-Hibernate
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [THIRD.USER$U$USER_NAME]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement

Теперь на основе полученной информации мы хотим создать единый обработчик ошибок. Поскольку DuplicateKeyException наследует от DataIntegrityViolationException, то в обработчике надо предусмотреть обработку только DataIntegrityViolationException. Контроллеру, чтобы правильно вернуть пользователю информацию об ошибке (комментарий к полю формы ввода user_name или email), надо идентифицировать строку THIRD.USER$U$USER_NAME (для email строка будет THIRD.USER$U$EMAIL) как ограничение и разобрать ее. Для DAO-Hibernate это сделать просто - надо опуститься на уровень ниже и получить org.hibernate.exception.ConstraintViolationException, в котором заботливо предусмотрен метод getConstraintName. В DAO-Jdbc такой возможности нет и надо доставать имя ограничения прямо из сообщения. Спрашивается, что мешало создать метод (поле) getConstraintName в спринговом DataIntegrityViolationException и при реализации преобразований исключений для jdbc сделать его наполнение, раз уж эти исключения считаются стандартными?! Раз нет такой возможности, то в едином обработчике надо писать код, который бы еще проверял, а сидит ли на уровне ниже Hibernet-овское исключение или JDBC-ное (или еще какое-то), что уже криво. А с учетом того, что помимо реализации DAO может меняться и СУБД, то могут и еще какие-то проблемы всплыть.

Получается, чтобы сделать обработчик ошибок единым, надо вообще всегда брать getRootCause() и парсить исходную ошибку. И тогда от спринговых ошибок остается единственная польза - они рантаймовские. Понятно, что они поделены на группы и при анализе ошибки можно отделить DataIntegrityViolationException, например, от OptimisticLockingFailureException, но пример выше показывает, что этого недостаточно.
...
Рейтинг: 0 / 0
Hibernate - cохранение объекта
    #39303756
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myauchaПусть у нас есть два DAO - для JDBC и для Hibernate
тема про хибер? Тогда при чём JDBC, да ещё попытка одного кода для JDBC и для ОРМ.
Кто на ком стоял?
Тебе бы тему переименовать чтобы не пудрить мозги:
Академико-теоретическая задача про универсальный код в DAL.
myauchaА с учетом того, что помимо реализации DAO может меняться и СУБД, то могут и еще какие-то проблемы всплыть.
и программисты могут меняться.
...
Рейтинг: 0 / 0
12 сообщений из 37, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate - cохранение объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]