【问题标题】:Spring boot JPA many to many query | find all courses courses which are attended studentsSpring boot JPA 多对多查询 |查找参加学生的所有课程课程
【发布时间】:2022-10-02 00:38:30
【问题描述】:

例如,我们有学生 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;
}
  • 你可以添加你的实体映射吗?
  • @talex 刚刚将它们添加到主要问题中。

标签: java spring jpa many-to-many


【解决方案1】:
@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 是按课程分组的所有学生列表的子集的课程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2020-12-11
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多