2014-04-04 17 views
10

sto usando CrudRepository della primavera-dati-APP a definire solo un'interfaccia di un'entità e poi avere tutti i metodi CRUD standard senza dover fornire un'implementazione in modo esplicito, ad esempio:Come implementare solo il metodo specifico di CrudRepository in primavera?

public interface UserRepo extends CrudRepository<User, Long> { 

} 

Anche se ora mi piacerebbe piace sovrascrivere solo il metodo save() nella mia implementazione personalizzata. Come potrei ottenere questo? Perché, se implemento l'interfaccia UserRepo, dovrei implementare tutti gli altri metodi CRUD ereditati dall'interfaccia CrudRepository.

Non riesco a scrivere la mia implementazione che ha tutti i metodi CRUD ma sovrascrive solo uno senza dover implementare tutti gli altri da solo?

risposta

12

Si può fare qualcosa molto simile a, che credo sarà il raggiungere il risultato che stai cercando.

misure necessarie:

1) UserRepo sarà ora estendere 2 interfacce:

public interface UserRepo extends CrudRepository<User, Long>, UserCustomMethods{ 

} 

2) Creare una nuova interfaccia denominata UserCustomMethods (si può scegliere il nome e modificare sia qui che nella fase 1)

public interface UserCustomMethods{ 
    public void mySave(User... users); 

} 

3) creare una nuova classe chiamata (qui il nome fa e dovrebbe essere RepositoryName Impl, perché se si chiama qualcos'altro, sarà necessario regolare la configurazione Java/XML di conseguenza). questa classe dovrebbe implementare solo l'interfaccia CUSTOM che hai creato.

SUGGERIMENTO: è possibile iniettare EntityManager in questa classe per le vostre domande

public class UserRepoImpl implements UserCustomMethods{ 

    //This is my tip, but not a must... 
    @PersistenceContext 
    private EntityManager em; 

    public void mySave(User... users){ 
     //do what you need here 
    } 
} 

4) Iniettare UserRepo ovunque sia necessario, e godere sia CRUD ei tuoi metodi personalizzati :)

+0

Quindi, al fine di sovrascrivere solo il metodo di salvataggio dichiarare/implementare il metodo di salvataggio in UserCustomMethods/UserRepoImpl ?. L'esempio che fornisci qui mostra un metodo aggiuntivo, ma questo vale anche per i metodi esistenti? – coderatchet

+0

Sì, è possibile aggiungere metodi all'interfaccia personalizzata con la stessa firma dei metodi predefiniti che si desidera sovrascrivere e implementarli nella classe Impl implementando l'interfaccia personalizzata: in questo modo, Spring Data utilizzerà l'implementazione personalizzata anziché quello predefinito Almeno questo funziona per me per il metodo delete in Spring Data JPA 1.7.2. –

+0

Come posso utilizzare metodi non personalizzati di UserRepo (auto fornito da dati primaverili) in UserRepoImpl :)? – bodrin

Problemi correlati