Spring Data,查找嵌套对象的属性

49

我有如下代码:

@Entity
public class StudentEntity {
    @Id
    private String id;
    private Student student;
    ...
}


public class Student {
    private String name;
    private List<Grade> grades;
}


public class Grade {
    private String className;
    private String grade;
}

我已经设置了一个Spring Data MongoDB仓库,现在我想创建一个方法,根据我传入的className参数,返回一个基于List<Student>的列表。基于我所读的一切,我认为以下代码应该有效:

public List<Student> findByStudentGradesClassName(final String className);

但是这会产生一个错误,说参数类型应该是一个Grade对象。我只想传入一个String className

这种情况可能吗?

1个回答

92

您需要使用下划线将嵌套字段分隔:

public List<Student> findByStudent_Grades_ClassName(final String className);

请注意,您仍需要使用大写字母开头来命名字段。


7
使用Spring Boot 2.1.8 / Spring Data 2.1.10,我发现下划线是不必要的。在存储库中测试了一个@ManyToOne(因此不是列表)嵌套字段,并使用countAll...语句。 - BitfulByte
9
下划线在某些情况下仍然很有用,例如当你有X.myName和X.MY.name的关系时。我知道这是不寻常的情况,但我需要在X和相关组件中复制值。两者都将与FindByMyName匹配,因此会出现错误。幸运的是,FindByMy_Name像预期的那样起作用。 - Antoniossss
4
Sonarqube不喜欢在方法名中使用下划线。 - Akash
4
@Akash 这个规则总是可以被禁用,这样更易读,因为你可以清楚地看到你的层级中的等级。 - Andronicus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接