Spring Boot +弹性搜索

时间:2014-09-10 17:15:26

标签: elasticsearch spring-data spring-boot spring-data-jpa

我正在尝试使用Spring Boot和Elastic Search设置应用程序。此应用程序已使用Spring Data JPA存储库来保留我的实体。我尝试在启用ElasticSearch配置的情况下运行应用程序时遇到的问题是我在扫描存储库时遇到异常。

我收到以下异常:

Caused by: java.lang.IllegalArgumentException: Unable to obtain mapping metadata for int!

我的存储库按以下方式定义:

@Repository
public interface AdminUserRepository extends PagingAndSortingRepository<AdminUser, Long> {

    /**
     * Returns an AdminUser that match the email specified by parameter.
     * @param email AdminUser email.
     * @return An AdminUser instance.
     */
    AdminUser findByEmail(final String email);

    /**
     * Returns an AdminUser that match the email and business name specified by parameter.
     * @param email AdminUser email.
     * @param businessName Business Name.
     * @return number of matching instances.
     */
    int countByEmailAndBusinessName(final String email, final String businessName);
}

似乎由于计数查询的签名返回int而发生异常。即使此存储库与JPA一起正常工作,它也会抛出一个启用弹性搜索的异常。

我想知道存储库中的返回类型是否有任何限制,或者我的配置中是否遗漏了某些内容。

我的Java配置类:

@Configuration
@EnableElasticsearchRepositories
public class ElasticSearchConfig {
}

谢谢!

2 个答案:

答案 0 :(得分:10)

看起来Spring Data Elasticsearch正在寻找一个用于Spring Data JPA的存储库。当您在同一个应用程序中使用多个Spring Data模块时,您应该将存储库放在单独的包中,然后在@Enable...注释上引用此包。

例如:

@Configuration
@EnableElasticsearchRepositories("com.foo.elasticsearch")
@EnableJpaRepositories("com.foo.jpa")
public class MyConfiguration {

}

答案 1 :(得分:0)

对于counts,春季数据使用Long而不是int。尝试更改应该起作用的方法类型。

以下是文档的参考:http://docs.spring.io/autorepo/docs/spring-data-elasticsearch/2.0.2.RELEASE/reference/html/#repositories.core-concepts