Подтвердить что ты не робот

Spring Исключения CrudRepository

У меня есть этот Spring Data CrudRepository, который обрабатывает операции CRUD в БД.

@Repository
public interface IUserRepository extends CrudRepository<User, String> {

}

User - это таблица сущностей пользователя моей БД. CrudRepository добавляет следующие операции в репозиторий:

  • delete(String ID)
  • findOne(String ID)
  • save(User user)

Как указано в документации , операции удаления и поиска throw IllegalArgumentException в случае, если данный идентификатор равен null, в то время как операция сохранения не вызывает никаких исключений.

Проблема в том, что javadoc CrudRepository не упоминает о других исключениях, вызванных этими операциями. Например, он не говорит о том, что операция delete(String ID) вызывает EmptyResultDataAccessException, если предоставленный идентификатор не существует в БД.

В javadoc операции save(User user) не выясняется, какие исключения выдаются, если вы вставляете нового пользователя, который нарушает одно ограничение целостности данных (по уникальным полям и внешним ключам). Кроме того, он не предупреждает вас, пишете ли вы нового или существующего пользователя: он просто создает нового пользователя или перезаписывает, если он существует (так что это операция "Вставка + обновление" ).

В корпоративном приложении я должен уловить каждое бросающееся исключение, которое может выполнить операция, и я должен прочитать об этом в операции javadoc.

Знаете ли вы какую-либо четкую документацию об исключениях CrudRepository?

Спасибо

4b9b3361

Ответ 1

Spring имеет встроенный механизм перевода исключений, так что все исключения, переданные поставщиками персистентности JPA, преобразуются в Spring DataAccessException - для всех beans, аннотированный с помощью @Repository (или настроенный).

Существует четыре основные группы -

  • NonTransientDataAccessException - это исключения, в которых повторение одной и той же операции завершится неудачно, если причина Исключения не будет исправлена. Поэтому, если вы передаете не существующий идентификатор, например, он завершится с ошибкой, если в базе данных не существует идентификатора.

  • RecoverableDataAccessException - это "противоположность" предыдущего - исключения, которые можно восстановить - после некоторых шагов восстановления. Подробнее в документах API

  • ScriptException - Исключения, связанные с SQL, при попытке обработать неверно сформированный script например.

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

Тем не менее, идеальное место для поиска документации обо всех исключениях - находится в самом API - просто перейдите по иерархии DataAccessException.