Java 弹簧数据,按嵌套对象的属性查找

Java 弹簧数据,按嵌套对象的属性查找,java,spring,spring-boot,jpa,spring-data-jpa,Java,Spring,Spring Boot,Jpa,Spring Data Jpa,我有以下代码: @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 cla

我有以下代码:

@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;
}
但这会给出一个错误,即参数类型应该是
Grade
对象。我真的只想传入一个
字符串className


这可能吗?

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

public List<Student> findByStudent_Grades_ClassName(final String className);
public List findByStudent\u Grades\u ClassName(最终字符串ClassName);

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

使用Spring boot 2.1.8/Spring data 2.1.10,我发现下划线是不必要的。在@ManyToOne(所以不是列表)嵌套字段上测试,并使用countAll。。。例如,如果您有X.myName和X.MY.name关系,则repository.underline中的语句仍然很方便。我知道这是不常见的情况,但我需要在X和相关组件中复制值。两者都将匹配FindByMyName,因此会出现错误。幸运地找到了Bymy_Name wokrs,正如预期的那样。Sonarqube不喜欢方法名称中的下划线。@Akash该规则可以始终禁用,它更具可读性,因为您可以清楚地看到层次结构中的级别
public List<Student> findByStudent_Grades_ClassName(final String className);