Я думаю, можно с уверенностью сказать, что существуют разные мнения о том, какие исключения следует проверять. Например, рассмотрим этот отрывок из Введение в Spring Framework :
Исключение доступа к данным Spring
иерархия основана на непроверенной
(время выполнения) исключения. Поработав
с весны на нескольких проектах я
все больше и больше убежден, что это было
правильное решение.
Исключения при доступе к данным обычно не
возмещена. Например, если мы не можем
подключиться к базе данных, конкретный
бизнес-объект вряд ли сможет
обойти проблему. Один
потенциальное исключение оптимистично
нарушения блокировки, но не все
приложения используют оптимистическую блокировку.
Обычно плохо быть вынужденным писать
код, чтобы поймать фатальные исключения, которые
не может быть разумно обработан. Позволить
они распространяются на обработчики верхнего уровня
как сервлет или EJB-контейнер
обычно более уместно. Вся весна
исключения доступа к данным являются подклассами
DataAccessException, поэтому, если мы делаем
выбрать, чтобы поймать все доступ к данным Spring
исключения, мы можем легко сделать это.
Обратите внимание, что если мы хотим восстановить
из неконтролируемого доступа к данным
Исключение, мы все еще можем сделать это. Мы можем
написать код для обработки только
восстанавливаемое состояние. Например, если
мы считаем, что только оптимистично
нарушение блокировки исправимо, мы
можно написать код в Spring DAO как
следующим образом:
try {// do work} catch
(OptimisticLockingFailureException ex)
{// Я заинтересован в этом} Если
Весенние исключения доступа к данным были
проверил, нам нужно написать
следующий код Обратите внимание, что мы могли
выбрать, чтобы написать это в любом случае:
try {// do work} catch
(OptimisticLockingFailureException ex)
{// Я заинтересован в этом} поймать
(DataAccessException ex) {// Fatal;
просто отбросить его} Один потенциал
Возражение против первого примера - это
компилятор не может навязать обработку
потенциально извлекаемое исключение
- относится и ко второму. Потому что мы вынуждены ловить базу
исключение (DataAccessException),
Компилятор не будет выполнять проверку для
подкласс
(OptimisticLockingFailureException).
Таким образом, компилятор заставит нас
написать код для обработки неисправимого
проблема, но не оказывают никакой помощи в
заставляя нас иметь дело с
исправимая проблема.
Использование Spring неконтролируемого доступа к данным
исключения соответствуют тому из
многие - вероятно, наиболее - успешные
рамки персистентности. (Действительно, это
был частично вдохновлен JDO.) JDBC
один из немногих API доступа к данным для использования
проверенные исключения. TopLink и JDO,
например, использовать непроверенные исключения
исключительно. Hibernate переключился с
отмечены непроверенные исключения в
версия 3.
Исключения при доступе к данным явно находятся вне непосредственного контроля над программой, поэтому, в соответствии с практиками, их следует проверять. Но люди у источника весны отличаются. И я доверяю их суждению больше, чем явным практикам.
Поэтому я не вижу ничего плохого в том, чтобы выдавать непроверенное исключение, указывающее, что транзакция должна быть откатана. Конечно, вы также можете использовать отмеченные исключения и настроить для них откат. (подробности см. в ответе Аффе)