2014-11-21 7 views
8

io uso querydsl è per questo che non ho bisogno di metodo come findByName() e tutte le mie interfacce del repository sono vuote.Codice generico non riuscito con dati Spring e Querydsl

Così provo a creare il codice genrico per evitare un'interfaccia ripetitiva con metodi vuoti perché ho molte classi nelle mie entità mappate da ibernazione.

public interface GenericResposotory<T> 
       extends JpaRepository<T, Integer>, QueryDslPredicateExecutor<T> { 

} 

Quando eseguo il mio server ottengo questo errore:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'genericResposotory': 
Invocation of init method failed; nested exception is 
java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 

anche non c'è un modo per fare un repository generico come cerco di fare?

+0

quale versione primavera Are You On? –

+0

uso 4.0.5.RELEASE per spring e 1.6.0.RELEASE per spring-data-jpa – Youssef

risposta

1

I dati di primavera cercano di creare bean per tutte le interfacce create che estendono JpaRepository. Se si vuole avere una sorta di repository di base che non saranno utilizzati segnare la vostra interfaccia con @NoRepositoryBean

+0

Lo contrassegno ma ottengo 'Impossibile eseguire il campo autowire: private repository.GenericRespository' quando provo' @Autowired \t GenericRespository privato region_repository; ' – Youssef

+1

Ok, quindi ho frainteso la domanda. Ho pensato che questa interfaccia fosse una base per altre cose e la estendessi con altre interfacce. In quel caso non penso che sia possibile ottenere ciò che vuoi. Devi semplicemente estendere l'interfaccia generica con un altro e impostare T in una classe. – Nadir

0

Repository è un'interfaccia marcatore per la primavera, che aiuta a trovare il proprio repository estesi e creare repository estraendo il tipo di entità . Possiamo vedere in RepositoryFactorySupport:

Bean di fabbrica per creare istanze di una determinata interfaccia di repository. Crea un proxy che implementa l'interfaccia del repository * configurata e applica un consiglio che passa il controllo allo
QueryExecuterMethodInterceptor. La strategia di rilevamento delle query * può essere configurata impostando QueryLookupStrategy.Key.

Ecco perché, penso, non è possibile creare direttamente un repository generico.

Ma è possibile provare a utilizzare RepositoryFactorySupport (implementato JpaRepositoryFactory) per generare archivi e inserirli in contesto manualmente.

Inoltre, è possibile ridurre il numero di file in progetto e l'inquinamento dello spazio dei nomi definendo repository come interfacce interne: basta aggiungere un attributo come illustrato di seguito:

<jpa:repositories base-package="com.pack" consider-nested-repositories="true"/> 
Problemi correlati