Spring Data ElasticsearchCrudRepository无法识别参数

时间:2014-09-03 11:50:15

标签: elasticsearch spring-data

我有一个带有以下变量的@Document“Project”类:

    @Document(indexName = "project-index")
    public class Project {
    ...
        @JsonProperty("import_id")
        private Long importId;

        private String title;
   ...
    //getters and setters
    }

我的JSON如下所示

    {
       "_id" : ObjectId("5269fd92e4b0c74e42976c91"),
    ...
        "import_id" : NumberLong(1),
         "title" : "Something",
    ...
    }

我的@Repository类就像:

    @Repository
    public interface ProjectRepository extends ElasticsearchCrudRepository<Project, String>{
        Page<Project> findByImportId(Long importId, Pageable page);
        Page<Project> findByTitleLike(String title, Pageable page);
    }

问题是findByImportId没有获取任何数据,而findByTitleLike工作正常并让我获取数据,我尝试了不同的配置,但似乎SpringData没有解析必须通过import_id搜索的字段,即使它配置了@JsonProperty。此外,我尝试将变量名称更改为import_id(也是getter和setter),但在这种情况下,当我尝试使用findByImport_Id时,findByImport_id,findByImport__Id或findByImport__id在运行时会出错。

任何想法如何将带有下划线的db变量映射到以后可以被ElasticsearchCrudRepository识别的java变量?

由于

1 个答案:

答案 0 :(得分:1)

来自Spring Docs

  

如果您的属性名称包含下划线(例如first_name),则可以使用第二个下划线转义方法名称中的下划线。对于first_name属性,查询方法必须命名为findByFirst__name(...)。

所以看起来正确的是findByImport__id