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&lt;Student&gt;。根据我读过的所有内容,我认为以下方法可行:

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数据,通过嵌套对象的属性查找的主要内容,如果未能解决你的问题,请参考以下文章

如何通过猫鼬中的嵌套属性查找

Spring Data JPA 通过嵌入对象属性查找

Spring Boot如何通过嵌套属性查找记录[重复]

通过在嵌套的对象数组中查找多个条件来过滤数组

如何在嵌套的 JS 对象中查找特定属性的总和

如何使用存储库接口在 Spring Data 中通过其嵌套对象的 objectId 查找集合?