在Spring中解析MongoRepository的变量名

时间:2017-10-30 12:41:52

标签: java spring mongodb mongorepository

MongoRepository中带有_的变量的正确方法名称是什么。

History.java

@Document(collection = "spring-history")
public class History {
    private Long record_id;

    //getter - setter
}

HistoryRepository.java

public interface HistoryRepository extends MongoRepository<History, String>{
    List<History> findAllByRecordid(Long recordId);
}

我收到了以下异常

Caused by: org.springframework.data.mapping.PropertyReferenceException: No property recordid found for type History! Did you mean 'record_id'?

我尝试过跟随变量选项,但这些都没有。

List<History> findAllByRecordId(Long recordId);
List<History> findAllByRecord_id(Long recordId);
List<History> findAllByRecord__id(Long recordId);

3 个答案:

答案 0 :(得分:1)

例外情况表明存在No property recordid found for type History!

这是因为编写为findAllByRecordid的存储库方法当前正在recordid类中查找属性History

你要做的就是相应地改变你的History课程;例如,您可以更改

private Long record_id;

private Long recordid;

但是,由于我认为record_id是一个组合名称变量,您应该使用驼峰大小写约定并将其命名为recordId

遵循camel case约定,您还必须将存储库方法更改为List<History> findByRecordId(Long recordId);

在这种情况下,您还必须使用recordId注释注释@Field,以便将recordId属性映射到MongoDB BSON文档中的实际键。有关更多详情/信息,您可以查看Mapping annotation overview

答案 1 :(得分:0)

更改变量声明
private Long record_id; 

private Long recordId;

并使用此:

List<History> findByRecordId(Long recordId);

答案 2 :(得分:0)

使用

@Field("record_id") 
private Long recordId;