How do you use both Spring Data JPA and Spring Data Elasticsearch repositories on the same domain class in a Spring Boot application?

Johnny Lim

I'm trying to use both Spring Data JPA and Spring Data Elasticsearch on the same domain object but it doesn't work.

When I tried to run a simple test, I got the following exception:

org.springframework.data.mapping.PropertyReferenceException: No property index found for type Person! at org.springframework.data.mapping.PropertyPath.(PropertyPath.java:75) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.mapping.PropertyPath.create(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] at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:270) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:241) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.repository.query.parser.Part.(Part.java:76) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at 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) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at 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.PartTreeJpaQuery.(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) ~[spring-data-jpa-1.9.0.RELEASE.jar:na] at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:206) ~[spring-data-jpa-1.9.0.RELEASE.jar:na] at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:73) ~[spring-data-jpa-1.9.0.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.(RepositoryFactorySupport.java:408) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:206) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237) ~[spring-data-commons-1.11.0.RELEASE.jar:na] at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) ~[spring-data-jpa-1.9.0.RELEASE.jar:na] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) ~[spring-beans-4.2.1.RELEASE.jar:4.2.1.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ~[spring-beans-4.2.1.RELEASE.jar:4.2.1.RELEASE] ... 43 common frames omitted

They work when disabling either one.

The project is based on Spring Boot 1.3.0.M5.

This is a sample project reproducing the situation:

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

Kenny Bastani

Repositories in Spring Data are datasource agnostic, meaning that JpaRepository and ElasticsearchRepository both roll up into Repository interface. When this is the case, then auto-configuration of Spring Boot will cause Spring Data JPA to try and configure a bean for each repository in the project that inherits any Spring Data Commons base repository.

To fix this problem you need to move your JPA repository and Elasticsearch repository to separate packages and make sure to annotate your @SpringBootApplication application class with:

  • @EnableJpaRepositories
  • @EnableElasticsearchRepositories

Then you need to specify where the repositories are for each enable annotation. This ends up looking like:

@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);
    }

}

Then your application will be able to disambiguate which repositories are intended for which Spring Data project.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

How to use JPA Repositories without Spring Boot

From Dev

Spring boot - unit testing Spring Data JPA repositories

From Dev

Spring Boot: How to avoid too many JPA repositories for each domain class

From Dev

Posting data in a Spring Boot 2 Application with Spring Data JPA

From Dev

Spring Boot with multiple data sources using same repositories and model classes?

From Java

How to test Spring Data repositories?

From Dev

Multiple Spring Data JPA repositories in single transaction

From Dev

Using generics in Spring Data JPA repositories

From Dev

The Scala way of creating Spring Data JPA repositories

From Dev

Spring Data JPA Repositories with Java 8 Streams

From Dev

Multiple Spring Data JPA repositories in single transaction

From Dev

How to setup Spring Data JPA repositories without component scanning

From Dev

How to have multiple base classes for Spring Data JPA repositories?

From Dev

Spring Boot + Spring Data JPA + Spring Data ElasticSearch: elastic doesn't return any results

From Dev

How to set the data directory of ElasticSearch with Spring Boot

From Dev

How to use Constructor Mapping with Spring JPA Repositories

From Dev

Spring boot JPA without Spring data

From Dev

Spring Boot and Spring Data Jpa versions compatiblity

From Dev

Testing Spring JPA Repositories (non Spring Boot)

From Dev

Why are my Spring Data repositories not found if moved into another package of a Spring Boot application?

From Dev

Spring Data JPA how to use sorting?

From Dev

How to use hibernate @DynamicUpdate with spring data jpa?

From Dev

How to use JBossTS (Narayana) with Spring Data JPA

From Dev

How to use Elasticsearch suggestions with Spring data?

From Dev

How to use StringQuery in Elasticsearch Spring Data

From Dev

Spring Boot custom implementations for Spring Data repositories with MappedSuperclass and subclasses

From Dev

Spring Boot: Data loading Application wont persist hibernate/JPA

From Dev

Explicit use of EntityManager with Spring Data repositories

From Dev

Explicit use of EntityManager with Spring Data repositories

Related Related

  1. 1

    How to use JPA Repositories without Spring Boot

  2. 2

    Spring boot - unit testing Spring Data JPA repositories

  3. 3

    Spring Boot: How to avoid too many JPA repositories for each domain class

  4. 4

    Posting data in a Spring Boot 2 Application with Spring Data JPA

  5. 5

    Spring Boot with multiple data sources using same repositories and model classes?

  6. 6

    How to test Spring Data repositories?

  7. 7

    Multiple Spring Data JPA repositories in single transaction

  8. 8

    Using generics in Spring Data JPA repositories

  9. 9

    The Scala way of creating Spring Data JPA repositories

  10. 10

    Spring Data JPA Repositories with Java 8 Streams

  11. 11

    Multiple Spring Data JPA repositories in single transaction

  12. 12

    How to setup Spring Data JPA repositories without component scanning

  13. 13

    How to have multiple base classes for Spring Data JPA repositories?

  14. 14

    Spring Boot + Spring Data JPA + Spring Data ElasticSearch: elastic doesn't return any results

  15. 15

    How to set the data directory of ElasticSearch with Spring Boot

  16. 16

    How to use Constructor Mapping with Spring JPA Repositories

  17. 17

    Spring boot JPA without Spring data

  18. 18

    Spring Boot and Spring Data Jpa versions compatiblity

  19. 19

    Testing Spring JPA Repositories (non Spring Boot)

  20. 20

    Why are my Spring Data repositories not found if moved into another package of a Spring Boot application?

  21. 21

    Spring Data JPA how to use sorting?

  22. 22

    How to use hibernate @DynamicUpdate with spring data jpa?

  23. 23

    How to use JBossTS (Narayana) with Spring Data JPA

  24. 24

    How to use Elasticsearch suggestions with Spring data?

  25. 25

    How to use StringQuery in Elasticsearch Spring Data

  26. 26

    Spring Boot custom implementations for Spring Data repositories with MappedSuperclass and subclasses

  27. 27

    Spring Boot: Data loading Application wont persist hibernate/JPA

  28. 28

    Explicit use of EntityManager with Spring Data repositories

  29. 29

    Explicit use of EntityManager with Spring Data repositories

HotTag

Archive