【问题标题】:Spring data, find by property of a nested objectSpring数据,通过嵌套对象的属性查找
【发布时间】: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

这可能吗?

【问题讨论】:

    标签: java spring spring-boot jpa spring-data-jpa


    【解决方案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 规则始终可以禁用,它更具可读性,因为您可以清楚地看到层次结构中的级别
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2022-10-14
    • 1970-01-01
    • 2018-01-16
    • 2019-12-06
    • 2021-03-05
    相关资源
    最近更新 更多