我正在尝试在同一域对象上同时使用Spring Data JPA和Spring Data Elasticsearch,但是它不起作用。
当我尝试运行一个简单的测试时,出现以下异常:
org.springframework.data.mapping.PropertyReferenceException:没有找到类型为Person的属性索引!在org.springframework.data.mapping.PropertyPath。(PropertyPath.java:75)〜[spring- data- commons-1.11.0.RELEASE.jar:na]在org.springframework.data.mapping.PropertyPath.create(PropertyPath .java:327)〜[spring-data- commons-1.11.0.RELEASE.jar:na]在org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:307)〜[spring- data-commons- 在org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270)〜[spring- data-commons-1.11.0.RELEASE.jar:na]的org.1.11.0.RELEASE.jar:na]。 springframework.data.mapping.PropertyPath.from(PropertyPath.java:241)〜[spring- data- commons-1.11.0.RELEASE.jar:na]在org.springframework.data.repository.query.parser.Part。( Part.java:76)〜[spring-data-commons-1.11.0.RELEASE.jar:
禁用其中任何一个时,它们都起作用。
该项目基于Spring Boot 1.3.0.M5。
这是一个重现此情况的示例项目:
https://github.com/izeye/spring-boot-throwaway-branches/tree/data-jpa-and- elasticsearch
在Spring数据存储库的数据源无关,这意味着JpaRepository和ElasticsearchRepository两卷成Repository接口。在这种情况下,Spring Boot的自动配置将导致Spring Data JPA尝试为继承了任何Spring Data Commons基础存储库的项目中的每个存储库配置一个bean。
JpaRepository
ElasticsearchRepository
Repository
要解决此问题,您需要将JPA存储库和Elasticsearch存储库移至单独的程序包,并确保使用以下方法注释@SpringBootApplication应用程序类:
@SpringBootApplication
@EnableJpaRepositories
@EnableElasticsearchRepositories
然后,您需要为每个启用批注指定存储库的位置。最终看起来像:
@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); } }
然后,您的应用程序将能够消除哪个存储库用于哪个Spring Data项目的歧义。