spring-data-jpa 在JPA-Sping Boot 中查找ManyToMany关系中的相关表的数目

rks48beu  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(154)

我有@ManyToMany相关的实体结构,名为Student和Course。我希望一个学生能够注册最多3门课程。同时,一门课程必须有最多10个学生。我该怎么做呢?(我也在使用mySql数据库和休眠)
这是我的学生类;

@Entity
@NoArgsConstructor
@Getter
@Setter
public class Student extends BaseEntity {
    private String name;
    private String surname;
    @Column(name = "student_number",unique = true)
    private String number; //student number

    @JsonIgnore
    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
    @JoinTable(name = "students_courses", joinColumns = @JoinColumn(name = "student_id"),
            inverseJoinColumns = @JoinColumn(name = "course_id"))
    private List<Course> courseList = new ArrayList<>();

}

课程类别;

@Entity
@Getter
@Setter
public class Course extends BaseEntity{

    @Column(name = "course_name",unique = true)
    private String courseName;

    @JsonIgnore
    @ManyToMany(mappedBy = "courseList",cascade = CascadeType.ALL ,fetch = FetchType.EAGER)
    private List<Student> studentList = new ArrayList<>();

}

存储库;
第一个

rekjcdws

rekjcdws1#

给定一个实现StudentRepository的对象studentRepository,你可以通过id Student student = studentRepository.findById(studentId)得到student(假设你的BaseEntity中有一个id,我认为是有的)。
然后,您可以测试student.courseList.size()<=MAX_NUMBER_OF_COURSES,例如,在保存studentRepository.save(student)或其他内容之前。
同样的逻辑也可以应用到课程中。不确定JPA和/或Sping Boot 中是否有更惯用的东西。

brqmpdu1

brqmpdu12#

谢谢你的回复。我做了这样的事情,它的工作学生。

/*
 * This Dto class is used to assign courses to a student
 *
 * */
 @Getter
 @Setter
 public class StudentCourseDto {
 private Long student_id;
 private List<Long> course_id_List;
 }

我在StudentServiceImp中编写了这段代码;

@Transactional(rollbackFor = Exception.class)
@Override
public void addCourse(StudentCourseDto studentCourseDto) {

    Student student = mapper.map(
            this.studentRepository.findById(studentCourseDto.getStudent_id()).get(), Student.class);

    for (Long id : studentCourseDto.getCourse_id_List()) {

        //A student cannot be registered in more than 5 courses.
        if (studentCourseDto.getCourse_id_List().size() < 5) {
            Course course = this.courseRepository.findById(id).orElse(null);
            student.getCourseList().add(course);
        }
    }
}

但是我不能为课程类添加数据。因为我可以在ManyToMany关系中从一边添加数据。你有解决这个问题的方法吗?

相关问题