在JPA中使用父实体获取子实体

时间:2020-03-26 09:43:16

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

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

School.java

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

Grade.Java

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

Student.java

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

Subject.java

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

我需要执行以下查询:

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

如何实现?

1 个答案:

答案 0 :(得分:0)

首先,请稍微进行一下JPA documentation。寻找Native Queries

例如第一个:

1)按schoolId获取所有学生

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

考虑到您有以下情况:

  • SchoolStudent与映射列schoolId的映射。
  • 在课程外,将为学生提供上述方法的存储库。您可能还想扩展JPARepository

也请注意

List<Student> findBySchool_SchoolId(Long id);

Java中用下划线命名您的方法不是一个好主意。 See this