Ich versuche, Spring Data JPA und Spring Data Elasticsearch für dasselbe Domänenobjekt zu verwenden, aber es funktioniert nicht.
Als ich versucht habe, einen einfachen Test auszuführen, habe ich folgende Ausnahme:
org.springframework.data.mapping.PropertyReferenceException: Nein Eigenschaftsindex für Typ Person gefunden! beim org.springframework.data.mapping.PropertyPath. (PropertyPath.java:75) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.mapping.PropertyPath.create (PropertyPath.java:327) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.mapping.PropertyPath.create (PropertyPath.java307) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:270) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:241) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.Part. (Part.java:76) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.PartTree $ OrPart. (PartTree.java:235) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.PartTree $ Prädikat.buildTree (PartTree.java:373) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.PartTree $ Prädikat. (PartTree.java:353) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.PartTree. (PartTree.java:84) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.jpa.repository.query.PartTreeJpaQuery. (PartTreeJpaQuery.java:61) ~ [Feder-Daten-jpa-1.9.0.RELEASE.jar: na] bei org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:95) ~ [Feder-Daten-jpa-1.9.0.RELEASE.jar: na] bei org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateIfNotFoundQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:206) ~ [Feder-Daten-jpa-1.9.0.RELEASE.jar: na] bei org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ AbstractQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:73) ~ [Feder-Daten-jpa-1.9.0.RELEASE.jar: na] bei org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor. (RepositoryFactorySupport.java:408) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository (RepositoryFactorySupport.java:206) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn (RepositoryFactoryBeanSupport.java:251) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet (RepositoryFactoryBeanSupport.java:237) ~ [feder-daten-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet (JpaRepositoryFactoryBean.java:92) ~ [Feder-Daten-jpa-1.9.0.RELEASE.jar: na] bei org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1637) ~ [Frühling-Bohnen-4.2.1.RELEASE.jar: 4.2.1.RELEASE] bei org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1574) ~ [Frühling-Bohnen-4.2.1.RELEASE.jar: 4.2.1.RELEASE] ... 43 gemeinsame Rahmen entfällt
Sie funktionieren, wenn Sie einen deaktivieren.
Das Projekt basiert auf Spring Boot 1.3.0.M5.
Dies ist ein Beispielprojekt, das die Situation wiedergibt:
Repositorys im Frühjahr Daten sind datenquellenunabhängig, was bedeutet, dass JpaRepository
und ElasticsearchRepository
in Repository
interface zusammenlaufen. Wenn dies der Fall ist, bewirkt die automatische Konfiguration von Spring Boot, dass Spring Data JPA versucht, eine Bean für jedes Repository im Projekt zu konfigurieren, das ein Spring Data Commons-Basisrepository erbt.
Um dieses Problem zu beheben, müssen Sie Ihr JPA-Repository und das Elasticsearch-Repository in separate Pakete verschieben und sicherstellen, dass Sie Ihre @SpringBootApplication
-Anwendungsklasse mit folgenden Anmerkungen versehen:
@EnableJpaRepositories
@EnableElasticsearchRepositories
Dann müssen Sie angeben, wo sich die Repositorys für die einzelnen aktivierten Annotations befinden. Das sieht schließlich so aus:
%Vor%Dann ist Ihre Anwendung in der Lage zu klären, welche Repositories für welches Spring Data-Projekt bestimmt sind.
Sie können wie folgt vorgehen:
%Vor%Oder in SpringBoot:
%Vor%Tags und Links spring-data-jpa spring-data spring-boot spring-data-elasticsearch