Spring数据,通过嵌套对象的属性查找
Posted
技术标签:
【中文标题】Spring数据,通过嵌套对象的属性查找【英文标题】:Spring data, find by property of a nested object 【发布时间】:2019-08-29 22:42:12 【问题描述】:我有以下代码:
@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】:您必须使用下划线分隔嵌套字段:
public List<Student> findByStudent_Grades_ClassName(final String className);
请注意,您仍然必须以大写开头的字段名称。
【讨论】:
使用 Spring boot 2.1.8 / spring data 2.1.10 我发现下划线不是必须的。在 @ManyToOne(所以不是列表)嵌套字段上测试,并在存储库中使用 countAll... 语句。 下划线仍然派上用场,例如,如果您有 X.myName 和 X.MY.name 关系。我知道这是不常见的情况,但我需要在 X 和相关组件中复制值。两者都将匹配 FindByMyName 因此错误。幸运的是 FindByMy_Name 按预期工作。 Sonarqube 不喜欢方法名称中的下划线。 @Akash 规则始终可以禁用,它更具可读性,因为您可以清楚地看到层次结构中的级别以上是关于Spring数据,通过嵌套对象的属性查找的主要内容,如果未能解决你的问题,请参考以下文章