Spring Boot JPA多对多查询|查找学生参加的所有课程

shyt4zoc  于 2022-10-04  发布在  Spring
关注(0)|答案(2)|浏览(120)

例如,我们有学生S1、S2、S3、S4和课程C1、C2和C3。

学生s1、s2注意c1

学生S1、S2、S3参加C2课程。

查找S1和S2一起参加的所有课程

(预期答案为C1和C2)

如果能够展示Answer如何在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;
}
oxosxuxt

oxosxuxt1#

@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);

您可以将上面的查询用于您的任务。在此查询中,首先学生按他们参加的课程分组。分组后,筛选出学生_lst是按课程分组的所有学生列表的子集的课程。

z9smfwbn

z9smfwbn2#

使用以下成员:

select c from Courses c where :student1 member of c.students and :student2 member of c.students

相关问题