8

Hem Spring Data JPA hem de Spring Data Elasticearch ürününü aynı etki alanı nesnesinde kullanmaya çalışıyorum ancak çalışmıyor.Spring Boot uygulamasında, Spring Data JPA ve Spring Data Elasticsearch havuzlarını aynı etki alanı sınıfında nasıl kullanırsınız?

org.springframework.data.mapping.PropertyReferenceException: tip kişi için bulunamadı mülkiyet indeksi basit bir testi çalıştırmak için çalıştı

, aşağıdaki özel durum var! org.springframework.data.mapping.PropertyPath (PropertyPath.java:75) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] 'da org.springframework.data.mapping.PropertyPath. oluşturma (PropertyPath.java:327) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.mapping.PropertyPath.create (PropertyPath.java:307) ~ [ spring-data-commons-1.11.0.RELEASE.jar: na] 'da org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:270) ~ [spring-data-commons-1.11.0.RELEASE .jar: na] adresindeki org.springframework.data.mapping.PropertyPath.from (PropertyPath.java:241) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] 'da org.springframework. veri deposu. query.parser.Part. (Part.java:76) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] 'da org.springframework.data.repository.query.parser.PartTree $ OrPart. (PartTree.java:235) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.PartTree $ Predicate.buildTree (PartTree.java: 373) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] at org.springframework.data.repository.query.parser.PartTree $ Predicate. (PartTree.java:353) ~ [bahar -data-commons-1.11.0.RELEASE.jar: na] 'da org.springframework.data.repository.query.parser.PartTree. (PartTree.java:84) ~ [spring-data-commons-1.11.0 .RELEASE.jar: na] at org.springframework.data.jpa.repository.query.PartTreeJpaQue ry. (PartTreeJpaQuery.java:61) ~ [spring-data-jpa-1.9.0.RELEASE.jar: na] at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy. java: 95) ~ [yay veri JPA-1.9.0.RELEASE.jar: na] org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ CreateIfNotFoundQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:206) de ~ [spring-data-jpa-1.9.0.RELEASE.jar: na] org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy $ SoyutQueryLookupStrategy.resolveQuery (JpaQueryLookupStrategy.java:73) ~ [yayın verileri -jpa-1.9.0.RELEASE.jar: na] org.springframework.data.repository.core.support.RepositoryFactorySupport $ QueryExecutorMethodInterceptor. (Rep ositoryFactorySupport.java:408) ~ [yay veri-mallar-1.11.0.RELEASE.jar: na] org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository (RepositoryFactorySupport.java:206 de) ~ [spring-data-commons-1.11.0.RELEASE.jar: na] 'da org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn (RepositoryFactoryBeanSupport.java:251) ~ [bahar verileri-ortak değerler -1.11.0.RELEASE.jar: na] org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet (RepositoryFactoryBeanSupport.java:237) ~ [spring-data-commons-1.11.0.RELEASE. jar: na] org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet (JpaRepositoryFactoryBean.java:92) ~ [spring-data-jpa-1.9.0.RELEASE.jar: na] numaralı telefondan org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods (AbstractAutowireCapableBeanFactory.java:1637) ~ [yay fasulye-4.2.1.RELEASE.jar: 4.2.1.RELEASE] org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java de : 1574) ile ~ [yay fasulye-4.2.1.RELEASE.jar: 4.2.1.RELEASE] ikisinden biri devre dışı bırakırken ... 43 ortak kare

Bunlar çalışma

atlanmış.

Proje, Spring Boot 1.3.0.M5 temel alınarak hazırlanmıştır. Bahar Veri

https://github.com/izeye/spring-boot-throwaway-branches/tree/data-jpa-and-elasticsearch

cevap

14

Depoları, yani veri kaynağı agnostik olduğunu JpaRepository ve ElasticsearchRepository kadar Repository arayüzüne hem rulo:

Bu

durum yaratarak örnek bir projedir. Bu durumda, Spring Boot'un otomatik yapılandırması, Spring Data JPA'nın, Spring Data Commons temel deposunu devralan projedeki her depo için bir fasülyeyi denemesine ve yapılandırmasına neden olacaktır.

sizinle @SpringBootApplication uygulama sınıfını açıklama paketler ayırmak için JPA depoyu ve Elasticsearch deposunu taşımak ve emin olmak gerekir Bu sorunu gidermek için: Sonra

  • @EnableJpaRepositories
  • @EnableElasticsearchRepositories

Her etkinleştirme açıklaması için depoların nerede olduğunu belirtmeniz gerekir.

@SpringBootApplication 
@EnableJpaRepositories("com.izeye.throwaway.data") 
@EnableElasticsearchRepositories("com.izeye.throwaway.indexing") 
public class Application { 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

Sonra uygulama hangi Bahar Veri projesi için amaçlanan hangi depoları belirsizliği mümkün olacak: Bu görünümü kazanıyor.

+1

teşekkür ederiz. Seçtiğim son bir çözüm için bana bir ipucu verdi. Benim için 'includeFilters' kullanmak onları başka bir pakete taşıyarak daha iyidir. Spring Data'nın veri kaynağı-agnostik doğası çok güzel fakat Spring Data JPA'nın mümkün olduğunda 'ElasticsearchRepository' arayüzlerini taramaması iyi olurdu. –

+2

Yaptığım işi yapan biri için bkz. Https://github.com/izeye/spring-boot-throwaway-branches/commit/874ccba09189d6ef897bc430c43b6e3705404399 –

+0

Teşekkürler kenny-bastani ve johnny-lim, ben hem sizin için hem de –

4

Böyle kullanabilirsiniz:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class)) 
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class)) 
public class DataConfiguration { 
    ... 
} 

Veya SpringBoot içinde: Ayrıntılar için

@SpringBootApplication 
@EnableJpaRepositories(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class)) 
@EnableElasticsearchRepositories(includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = ElasticsearchCrudRepository.class)) 
public class MyApplication { 
    ... 
} 
+0

oyladı 'EnableJpaRepositories' içinde olmak 'JpaRepository.class' kullanmamalıyız' ElasticsearchCrudRepository.class' ??? – edwin

+0

Çünkü @ EnableJpaRepositories' içinde exlude kullanıyorum. Jpa Repository'de sadece JpaRepository.class'ı kullanamazsınız –

+0

OKK size teşekkür ederim. – edwin

İlgili konular