首页 > 解决方案 > 使用 JPA 中的父实体获取子实体

问题描述

我在下面给出了这些实体,我想执行一些查询,但我不确定如何在 JPA 中执行。

学校.java

@Data
@Builder
public class School {
    private String schoolName;
    private int schoolId;
    private List<Grade> grades;
}

等级.Java

@Data
@Builder
public class Grade {
    private String grade;
    private int gradeId;
    private List<Student> students;
}

学生.java

@Data
@Builder
public class Student {
    private String studentName;
    private int studentId;
    private List<Subject> subjects;
}

主题.java

@Data
@Builder
public class Subject {
    private String subjectName;
    private int subjectId;
}

我需要执行这些查询:

  1. 通过 schoolId 获取所有学生
  2. 通过gradeId获取所有学生
  3. 通过 schoolId 和 GradeId 获取所有学生

如何做到这一点?

标签: javaspringspring-bootjpaspring-data-jpa

解决方案


首先,请浏览一下JPA 文档。寻找Native Queries

例如第一个:

1)通过schoolId获取所有学生

@Query("SELECT s FROM Student s WHERE s.school_id = :schoolId")
List<Student> findStudentsBySchoolId(@Param("schoolId") Long schoolId);

考虑到您有以下情况:

  • SchoolinStudent与映射列的映射schoolId
  • 并为学生提供一个存储库,上述方法将在其中使用。您可能还想扩展JPARepository.

另请注意

List<Student> findBySchool_SchoolId(Long id);

在中使用下划线命名方法不是一个好主意Java看到这个


推荐阅读