有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我应该如何对数据库建模,以便数据库中的每个学生实体都有一个与每个课程实体相关的分数?

我正在制作一个JavaCRUD应用程序,作为大学管理工具。我的数据库包含5个表(学院、学习计划、课程、教授和学生)。我想展示和管理每门课程的每个学生的成绩。我将学生和课程映射为多对多关系->;一个学生一次可以参加许多课程,一个课程有许多学生参加。我需要创建一个额外的表,还是应该在我的课程对象中实现一个包含Student和Integer(grade)作为键值对的HashMap? 还是有更好的方法来实现这一点

这是我的学生波乔:

@Data
@EqualsAndHashCode(callSuper=false)
@Entity
public class Student extends Person implements Serializable{

    private String JMBAG;

    @ManyToMany(mappedBy = "students")
    private List<Course> courses;

}

这是我的课程POJO:

@Data
@EqualsAndHashCode(callSuper=false)
@Entity
public class Course extends CollegeManagerEntity implements Serializable {

    private String name;

    private Integer year;

    private Integer ects;

    private Integer numberOfClasses;

    private Integer numberOfAuditorialExercises;

    private Integer numberOfLaboratoryExercises;

    private Integer numberOfConstructionalExercises;

    @ManyToMany
    private List<Professor> professors;

    @ManyToMany
    private List<Student> students;

    @ManyToMany(mappedBy = "courses")
    private List<StudyProgramme> studyProgrammes;

}

共 (1) 个答案

  1. # 1 楼答案

    如果您选择使用HashMap,它将如何在DB中实现?数据库模式会是什么样子

    通过遵循RDBMS方法,您需要一个新表。类似于this。 新实体将如下所示:

    @Entity
    public class CourseMember {
    
        private Long id;
    
        @ManyToOne
        @JoinColumn(name = "student_id", nullable = false)
        private Student student;
    
        @ManyToOne
        @JoinColumn(name = "course_id", nullable = false)
        private Course course;
    
        @Column
        private Integer grade;
    }
    

    然后你需要将你的新实体映射到学生和课程类

    @Entity
    public class Student {
        ...
        @OneToMany(mappedBy = "student")
        private List<CourseMember> courseMemberList;
    
    }
    
    @Entity
    public class Course {
        ...
        @OneToMany(mappedBy = "course")
        private List<CourseMember> courseMemberList;
    
    }