2014-11-21 11 views
8

Ich benutze querydsl Deshalb brauche ich keine Methode wie findByName() und alle meine Repository-Schnittstelle sind leer.Generic-Code fehlgeschlagen mit Spring-Daten und Querydsl

Also ich versuche, Genre-Code zu machen, repetitive Schnittstelle mit leeren Methoden zu vermeiden, weil ich viele Klassen in meinen Entitäten durch Hibernate zugeordnet haben.

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

} 

Wenn ich meinen Server laufen bekomme ich diesen Fehler:

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 

auch gibt es keine Möglichkeit, eine generische Repository zu machen, wie ich versuche, zu tun?

+0

die Feder Version sind Sie? –

+0

Ich benutze 4.0.5.RELEASE für Frühling und 1.6.0.RELEASE für Frühling-Daten-jpa – Youssef

Antwort

1

Spring-Daten versuchen, Beans für alle von Ihnen erstellten Schnittstellen zu erstellen, die JpaRepository erweitern. Wenn Sie eine Art Basis-Repository haben wollen, die nicht verwendet werden, markieren Sie Ihre Schnittstelle mit @NoRepositoryBean

+0

Ich markiere es, aber ich bekomme 'Konnte nicht Autowire-Feld: private repository.GenericRespository', wenn ich versuche @Autowired \t private GenericRespository region_repository; ' – Youssef

+1

Ok, also habe ich die Frage missverstanden. Ich dachte, dass diese Schnittstelle eine Basis für andere Dinge ist, und Sie erweitern sie mit anderen Schnittstellen. In diesem Fall glaube ich nicht, dass es möglich ist zu erreichen, was Sie wollen. Sie müssen einfach die generische Schnittstelle mit einer anderen erweitern und T auf eine Klasse setzen. – Nadir

0

Repository eine Markierungsschnittstelle für den Frühling ist, dass Sie Ihre eigenen erweiterten Repositories zu finden hilft und erstellen Repository durch die Art des Unternehmens Extrahieren . Wir können in RepositoryFactorySupport sehen:

Factory-Bean zum Erstellen von Instanzen einer bestimmten Repository-Schnittstelle. Erstellt einen Proxy, der die konfigurierte * Repository-Schnittstelle implementiert und einen Hinweis anwendet, der das Steuerelement an den
QueryExecuterMethodInterceptor übergibt. Abfrage * Erkennungsstrategie kann durch Festlegen von QueryLookupStrategy.Key konfiguriert werden.

Deshalb, ich denke, Sie können nicht generische Repository direkt erstellen.

Sie können jedoch versuchen, RepositoryFactorySupport (implementiert JpaRepositoryFactory) zu verwenden, um Repositories zu generieren und es manuell in den Kontext zu stellen.

Außerdem können Sie die Anzahl der Dateien im Projekt- und Namespace Verschmutzung durch die Definition von Repositorys als innere Schnittstellen reduzieren: nur ein Attribut hinzufügen, wie unten dargestellt:

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