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

Java 我应该如何对数据库进行建模,以便数据库中的每个学生实体都有一个与每个课程实体相关的分数?,java,database,hibernate,object,mapping,Java,Database,Hibernate,Object,Mapping,我正在制作一个JavaCRUD应用程序,作为大学管理工具。我的数据库包含5个表(学院、学习计划、课程、教授和学生)。我想展示和管理每门课程的每个学生的成绩。我将学生和课程映射为多对多关系->一个学生一次可以修很多课程,而一个课程有很多学生参加。我需要创建一个额外的表,还是应该在我的课程对象中实现一个包含Student和Integer(grade)作为键值对的HashMap? 还是有更好的方法来实现这一点 这是我的学生波乔: @Data @EqualsAndHashCode(callSuper=f

我正在制作一个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;

}
@数据
@EqualsAndHashCode(callSuper=false)
@实体
公共类学生扩展个人实现可序列化{
私人旅行袋;
@许多(mappedBy=“学生”)
私人名单课程;
}
这是我的课程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;

}
@数据
@EqualsAndHashCode(callSuper=false)
@实体
公共类课程扩展CollegeManagerEntity实现可序列化{
私有字符串名称;
私人整数年;
私有整数ects;
私有整数类;
审计业务的私有整数;
私人整数实验室练习;
私人整数号码;
@许多
私人名单教授;
@许多
私人名单学生;
@许多(mappedBy=“courses”)
私人名单研究计划;
}

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

通过遵循RDBMS方法,您需要一个新表。差不多。 新实体将如下所示:

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

}
@实体
公立班学生{
...
@OneToMany(mappedBy=“学生”)
私人列表课程成员列表;
}
@实体
公共课{
...
@OneToMany(mappedBy=“课程”)
私人列表课程成员列表;
}

是的,您确实需要一个额外的数据库表。每个多对多关系都需要一个单独的数据库表我明白你的意思。我不确定如何从db的角度实现映射。不过,这很有道理。非常感谢你的回答,非常有帮助。现在一切似乎都正常了。首先尝试设计DB模式,然后将其映射到Java代码。祝你好运