例如,我們有學生 S1、S2、S3、S4 和課程 C1、C2 和 C3。
S1、S2學生注意C1
學生 S1、S2、S3 參加 C2。
查找 S1 和 S2 一起參加的所有課程
(預期答案 C1 和 C2)
如果可以說明如何在 Spring JPA / CRUD 存盤庫中實作答案,我將不勝感激。
物體:
class Course {
@Id
private String id;
private String name;
@ManyToMany(fetch = FetchType.EAGER) //debugging purpouses
@JoinTable(name = "course_students",
joinColumns = @JoinColumn(name = "course_id"),
inverseJoinColumns = @JoinColumn(name = "student_id"))
Set<Student> students;
}
class Student {
@Id
String id;
String firstName;
String middleName;
String lastName;
String phoneNumber;
String email;
String avatar;
int age;
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "students")
Set<Course> courses;
}
uj5u.com熱心網友回復:
@Query(Select c from Course c group by c having :student_lst in array_arg(c.student))
List<Course> findCoursesByStudents(@param("student_lst") List<Student> student_lst);
您可以將上述查詢用于您的任務。在此查詢中,第一個學生按他們參加的課程分組。分組后過濾掉 student_lst 是按課程分組的所有學生串列的子集的課程。
uj5u.com熱心網友回復:
使用成員:
select c from Courses c where :student1 member of c.students and :student2 member of c.students
uj5u.com熱心網友回復:
為了讓學生注冊課程,這類似于以下查詢:
@Query("select student from Student student join student.courses course
where course.name in :givenCourses")
List<Student> getStudentsByCourses(
@Param("givenCourses") List<String> givenCourses )
反之亦然,以查找學生參加的特定課程
@Query("select course from Course course join course.students student
where student.firstName in :enrolledStudentList")
List<Course> getCoursesAttendedByStudents(
@Param("enrolledStudentList") List<String> enrolledStudentList )
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513445.html
標籤:爪哇春天jpa多对多
