web-dev-qa-db-fra.com

Exceptions Spring CrudRepository

J'ai cette Spring Data CrudRepository qui gère les opérations CRUD sur une base de données.

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

}

User est l'entité d'une table utilisateur de ma base de données. CrudRepository ajoute notamment les opérations suivantes au référentiel:

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

Comme indiqué dans la documentation , les opérations de suppression et de recherche jettent IllegalArgumentException au cas où l'id donné est nul tandis que l'opération de sauvegarde ne lève aucune exception.

Le problème est que le javadoc du CrudRepository ne fait aucune mention des autres exceptions levées par ces opérations. Par exemple, il ne dit pas que l'opération delete(String ID) lance un EmptyResultDataAccessException au cas où l'ID fourni est inexistant dans la base de données.

Dans le javadoc de l'opération save(User user), il n'est pas clair quelles exceptions sont levées au cas où vous insérez un nouvel utilisateur qui brise une contrainte d'intégrité des données (sur des champs uniques et des clés étrangères). De plus, il ne vous avertit pas si vous écrivez un nouvel utilisateur ou un utilisateur existant: il crée simplement un nouvel utilisateur ou l'écrase s'il existe (c'est donc une opération d'insertion + mise à jour).

Dans une application d'entreprise, je devrais être capable d'attraper toutes les exceptions jetables qu'une opération peut lancer et je devrais lire à ce sujet dans le javadoc de l'opération.

Connaissez-vous une documentation claire sur les exceptions CrudRepository?

Merci

32
gvdm

Spring possède un mécanisme de traduction des exceptions intégré, de sorte que toutes les exceptions levées par les fournisseurs de persistance JPA sont converties en Spring's DataAccessException - pour tous les beans annotés avec @Repository (ou configurés).

Il existe quatre groupes principaux -

  • NonTransientDataAccessException - ce sont les exceptions où une nouvelle tentative de la même opération échouerait à moins que la cause de l'exception ne soit corrigée. Ainsi, si vous transmettez un identifiant non existant par exemple, il échouera à moins que l'identifiant n'existe dans la base de données.

  • RecoverableDataAccessException - ce sont "l'opposé" de la précédente - des exceptions qui sont récupérables - après quelques étapes de récupération. Plus de détails dans la documentation de l'API

  • ScriptException - Exceptions liées à SQL, lors de la tentative de traitement d'un script mal formé par exemple.

  • TransientDataAccessException - ce sont l'exception lorsque la récupération est possible sans aucune étape explicite, par exemple en cas d'expiration de la base de données, vous réessayez après quelques secondes.

Cela dit, l'endroit idéal pour trouver de la documentation sur toutes les exceptions - se trouve dans l'API elle-même - passez simplement par la hiérarchie DataAccessException .

48
vtor