【问题标题】:Spring Boot + Elastic SearchSpring Boot + 弹性搜索
【发布时间】:2014-11-04 10:48:09
【问题描述】:

我正在尝试使用 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 {
}

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    例如:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-06-08
        • 2020-10-22
        • 2018-02-01
        • 2016-08-22
        • 2021-06-29
        • 2014-10-17
        • 2021-02-18
        • 1970-01-01
        相关资源
        最近更新 更多