Может ли доступ к данным Hibernate генерировать исключения, похожие на Spring DeadlockLoserDataAccessException или другое TransientDataAccessException? - PullRequest
1 голос
/ 04 октября 2011

В настоящее время я работаю над проектом, который использует доступ к данным в разных базах данных. Наша основная база данных доступна через Hibernate (либо через фреймворк Criteria, либо через HQL-запросы), но у нас также есть доступ к другим базам данных с использованием простых запросов JDBC / SQL (через Spring-Jdbc).

Для некоторых наших вызовов JDBC нам приходилось сталкиваться с возможностью того, что слой DAO выбрасывает некоторые разновидности среды выполнения Spring TransientDataAccessException, например DeadlockLoserDataAccessException или CannotAcquireLockException.

Мой вопрос: Должны ли мы планировать аналогичные исключения, выдаваемые DAO Hibernate? Очень сложно написать тесты, которые бы показывали такие исключения, и я не хочу создавать поддержку для них, если они не могут быть выброшены. И если они могут, какие именно исключения? Что ты думаешь?

Ответы [ 2 ]

1 голос
/ 08 октября 2011

Исключения, генерируемые вашей реализацией сохранности, поддерживаемой Spring, на самом деле не имеют корня в Spring => они исключения доступа к данным .

Следовательно, вы можете получить аналогичные исключения из чистой реализации Hibernate, например:

LockAcquisitionException : указывает на проблему с получением блокировки в базе данных

Сказав это, проверка этих исключений, в частности, не будет разумной.Следовательно, они RuntimeException с.Если вы получите эти исключения из вашей реализации, поддерживаемой Spring, я бы предпочел решить проблему.

1 голос
/ 04 октября 2011

Взгляните на Hibernate Session API, http://docs.jboss.org/hibernate/annotations/3.5/api/index.html?org/hibernate/Session.html вас; в частности, createQuery и createCriteria.

createQuery, который принимает строку hql, возвращает объект Query и создает исключение HibernateException. createCriteria возвращает объект Criteria без исключений. Вызов .list () для объекта Criteria или Query вызывает HibernateException.

Большинство вызовов функций, если они генерируют исключение, генерируют исключение HibernateException. Есть несколько особых случаев, таких как вызов uniqueResult () для объекта Query, который генерирует исключение NonUniqueResultException в дополнение к HibernateException.

...