Wie verwenden Sie sowohl Spring Data JPA- als auch Spring Data Elasticsearch-Repositorys in einer Spring Boot-Anwendung in derselben Domänenklasse?

8

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:

Ссылка

    
Johnny Lim 01.10.2015, 03:06
quelle

2 Antworten

14

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.

    
Kenny Bastani 01.10.2015, 05:00
quelle
4

Sie können wie folgt vorgehen:

%Vor%

Oder in SpringBoot:

%Vor%     
Efriandika Pratama 07.11.2015 04:23
quelle