|
|
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
Основная идея - привести DAO(JDBC) и DAO(Hibernate) к общему знаменателю, чтобы при подмене одного на другой не пришлось ничего меня в сервисе и контроллере. Для этих целей введены два новых исключения, расширяющие стандартные спринговые и более точно характеризующие ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 12:29 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myauchaОсновная идея - привести DAO(JDBC) и DAO(Hibernate) к общему знаменателю, чтобы при подмене одного на другой не пришлось ничего меня в сервисе и контроллере. Для этих целей введены два новых исключения, расширяющие стандартные спринговые и более точно характеризующие ошибки. это у вас программисты сами себе такие задачи могут ставить? По задаче - "Эх, нету на вас руководителя проекта со сроками"). По сабжу я привёл выше: У DAO(Хибера) нет ошибок в виде райзе в стандартной многопользовательской работе (веб проект). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:15 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
Petro123У DAO(Хибера) нет ошибок в виде райзе в стандартной многопользовательской работе (веб проект).А теперь переведите эту фразу на русский? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:24 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myaucha, может с тебя начнём? Я спросил, при каком юз кейсе или ВИ у тебя происходит райзе. Или у тебя академическая задача? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:38 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myaucha, насколько в курсе, спринг УЖЕ сделал вместо SQLExeption свои : ------------------ CannotAcquireLockException CannotSerializeTransactionException CleanupFailureDataAccessException ConcurrencyFailureException DataAccessException DataAccessResourceFailureException DataIntegrityViolationException DataRetrievalFailureException DeadlockLoserDataAccessException EmptyResultDataAccessException IncorrectResultSizeDataAccessException IncorrectUpdateSemanticsDataAccessException InvalidDataAccessApiUsageException InvalidDataAccessResourceUsageException OptimisticLockingFailureException PermissionDeniedDataAccessException PessimisticLockingFailureException TypeMismatchDataAccessException UncategorizedDataAccessException ----------- это мало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:43 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
Petro123, Я не отвечаю, когда обращение идет на ты, так что закончили дискуссию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:43 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myauchaЯ не отвечаю, когда обращение идет на ты, так что закончили дискуссию О, как. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:51 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myaucha, вики)) авторВ русском языке обращение «на вы» постепенно вошло в употребление с XVIII века из-за сильного влияния французского языка и культуры, прежде всего в кругах аристократии. Существуют теории, что исконно «вы» было обращением к врагу. Удачи! Работайте! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 13:55 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
Это не теория: "Иду на вы" - послание князя Святослава, которому было лень гоняться за разрозненными отрядами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2016, 16:47 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myauchaОсновная идея - привести DAO(JDBC) и DAO(Hibernate) к общему знаменателю, чтобы при подмене одного на другой не пришлось ничего меня в сервисе и контроллере. Для этих целей введены два новых исключения, расширяющие стандартные спринговые и более точно характеризующие ошибки. правильно. только это не расширение. это изоляция слоев, чтобы ожидаемые DAO-исключения (конкурентный доступ, уникальность, FK и т.п.) не вылезали туда, куда им не стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2016, 19:48 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
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, но пример выше показывает, что этого недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 11:35 |
|
||
|
Hibernate - cохранение объекта
|
|||
|---|---|---|---|
|
#18+
myauchaПусть у нас есть два DAO - для JDBC и для Hibernate тема про хибер? Тогда при чём JDBC, да ещё попытка одного кода для JDBC и для ОРМ. Кто на ком стоял? Тебе бы тему переименовать чтобы не пудрить мозги: Академико-теоретическая задача про универсальный код в DAL. myauchaА с учетом того, что помимо реализации DAO может меняться и СУБД, то могут и еще какие-то проблемы всплыть. и программисты могут меняться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2016, 12:22 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39302676&tid=2123753]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 225ms |
| total: | 381ms |

| 0 / 0 |
