2014-04-27 21 views
13

Ho questo Spring Data CrudRepository che gestisce le operazioni CRUD su un DB.Spring CrudRepository exceptions

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

} 

User è l'entità di una tabella utente del mio DB. CrudRepository aggiunge vale a dire le seguenti operazioni al repository:

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

Come indicato nella documentation, l'operazione di cancellazione e trovare gettano IllegalArgumentException nel caso in cui il dato id è null mentre l'operazione di salvataggio non genera alcuna eccezione.

Il problema è che il javadoc del CrudRepository non fa menzione delle altre eccezioni generate da queste operazioni. Ad esempio, non indica che l'operazione delete(String ID) genera un EmptyResultDataAccessException nel caso in cui l'ID fornito non esista nel DB.

Nella javadoc dell'operazione save(User user) non è chiaro quali eccezioni vengono lanciate se si inserisce un nuovo utente che interrompe un vincolo di integrità dei dati (su campi univoci e chiavi esterne). Inoltre non ti avvisa se stai scrivendo un utente nuovo o esistente: crea semplicemente un nuovo utente o sovrascrive se esistente (quindi è un'operazione Insert + Update).

In un'applicazione enterprise dovrei essere in grado di catturare ogni eccezione lanciabile che un'operazione può generare e dovrei leggere a riguardo nel javadoc dell'operazione.

Conosci una documentazione chiara sulle eccezioni di CrudRepository?

Grazie

risposta

22

Primavera è dotato di meccanismo di traduzione eccezione, in modo che tutte le eccezioni sollevate dai provider di persistenza JPA vengono convertiti in primavera di DataAccessException - per tutti i fagioli annotati con @Repository (o configurato).

Ci sono quattro gruppi principali -

  • NonTransientDataAccessException - queste sono le eccezioni in cui un nuovo tentativo della stessa operazione sarebbe fallire a meno che non viene corretta la causa dell'eccezione. Quindi, se si passa l'id non esistente, ad esempio, fallirà a meno che l'ID non esista nel database.

  • RecoverableDataAccessException - questi sono gli "opposti" del precedente - eccezioni che sono recuperabili - dopo alcuni passaggi di ripristino. Ulteriori dettagli nei documenti API

  • ScriptException - Eccezioni relative all'SQL, quando si tenta di elaborare uno script non ben formato, ad esempio.

  • TransientDataAccessException - questi sono l'eccezione quando il ripristino è possibile senza alcun passaggio esplicito, ad es. quando c'è un timeout nel database, si sta riprovando dopo pochi secondi.

Detto questo, il luogo ideale per trovare la documentazione su tutte le eccezioni - è nella stessa API - basta andare attraverso la gerarchia di DataAccessException.

+0

Apprezzare la fornitura di collegamenti a tutte le eccezioni e spiegare in dettaglio cosa significano. –

+1

@vtor cosa intendi per "meccanismo di traduzione delle eccezioni incorporato". Sono curioso di sapere perché la documentazione di primavera non dice esplicitamente che alcuni metodi lanciano questa DataAccessException, ad esempio il metodo di salvataggio della classe CrudRepository. – fabrik

Problemi correlati