小编典典

如何在Spring Boot应用程序的同一域类上同时使用Spring Data JPA和Spring Data Elasticsearch存储库?

spring-boot

我正在尝试在同一域对象上同时使用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


阅读 442

收藏
2020-05-30

共1个答案

小编典典

在Spring数据存储库的数据源无关,这意味着JpaRepositoryElasticsearchRepository两卷成Repository接口。在这种情况下,Spring
Boot的自动配置将导致Spring Data JPA尝试为继承了任何Spring Data Commons基础存储库的项目中的每个存储库配置一个bean。

要解决此问题,您需要将JPA存储库和Elasticsearch存储库移至单独的程序包,并确保使用以下方法注释@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项目的歧义。

2020-05-30