我在下面给出了这些实体,我想执行一些查询,但我不知道如何在 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;
}
我需要执行这些查询:
- 按 schoolId 获取所有学生
- 按年级 ID 获取所有学生
- 按学校 ID 和年级 ID 获取所有学生
如何实现这一目标?
最佳答案
首先,请浏览JPA documentation一点点。寻找Native Queries
.
例如第一个:
1) Get all Students By schoolId
@Query("SELECT s FROM Student s WHERE s.school_id = :schoolId")
List<Student> findStudentsBySchoolId(@Param("schoolId") Long schoolId);
考虑到您有以下情况:
School
的映射在Student
带映射列schoolId
.- 当然还有一个学生存储库,上面的方法将在其中运行。您可能还想扩展
JPARepository
.
另请注意
List<Student> findBySchool_SchoolId(Long id);
在 Java
中使用下划线命名方法并不是一个好主意。 See this
关于java - 使用 JPA 中的父实体获取子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60864470/