Spring数据,通过嵌套对象的属性查找

Dra*_*MTN 6 java spring jpa spring-data-jpa spring-boot

我有以下代码:

@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;
}
Run Code Online (Sandbox Code Playgroud)

我已经建立了一个Spring数据mongodb存储库,并且我试图创建一个方法,该方法将List<Student>基于className我作为参数传入的a 返回。根据我读过的所有内容,我认为以下方法可行:

public List<Student> findByStudentGradesClassName(final String className);
Run Code Online (Sandbox Code Playgroud)

但这会导致错误,指出参数类型应为Grade对象。我真的只想传递一个String className

这可能吗?

And*_*cus 11

您必须使用下划线分隔嵌套字段:

public List<Student> findByStudent_Grades_ClassName(final String className);
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然必须以大写字母开头字段名称。

  • 使用 Spring boot 2.1.8 / spring data 2.1.10 我发现下划线是不必要的。在 @ManyToOne (因此不是列表)嵌套字段上进行测试,并在存储库中使用 countAll... 语句。 (6认同)
  • Sonarqube 不喜欢方法名称中包含下划线。 (4认同)
  • @Akash 该规则始终可以禁用,它更具可读性,因为您可以清楚地看到层次结构中的级别 (3认同)
  • 下划线仍然派上用场,例如,如果您具有X.myName和X.MY.name关系。我知道这是不常见的情况,但是我需要在X和相关组件中都重复值。两者都将匹配FindByMyName从而出错。幸运的是,FindByMy_Name可以按预期运行。 (2认同)