我有一个带有以下变量的@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变量?
由于
答案 0 :(得分:1)
来自Spring Docs:
如果您的属性名称包含下划线(例如first_name),则可以使用第二个下划线转义方法名称中的下划线。对于first_name属性,查询方法必须命名为findByFirst__name(...)。
所以看起来正确的是findByImport__id