我正在制作一个 Java CRUD 应用程序,它将用作大学管理工具。我的数据库包含 5 个表(学院、学习计划、类(class)、教授和学生)。我想显示和管理每个学生每门类(class)的成绩。我将学生和类(class)映射为多对多关系 -> 1 个学生可以一次选修多门类(class),并且 1 门类(class)有许多学生参加。我是否需要创建一个额外的表,还是应该实现一个包含 Student 和 Integer(grade) 作为我的 Course 对象中的键值对的 HashMap? 或者有更好的方法来实现这一目标吗?
这是我的学生 POJO:
@Data
@EqualsAndHashCode(callSuper=false)
@Entity
public class Student extends Person implements Serializable{
private String JMBAG;
@ManyToMany(mappedBy = "students")
private List<Course> courses;
}
这是我的类(class) 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;
}
最佳答案
如果选择使用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;
}
然后您需要将新实体映射到 Student 和 Course 类。
@Entity
public class Student {
...
@OneToMany(mappedBy = "student")
private List<CourseMember> courseMemberList;
}
@Entity
public class Course {
...
@OneToMany(mappedBy = "course")
private List<CourseMember> courseMemberList;
}
关于java - 我应该如何对数据库进行建模,以便数据库中的每个学生实体都有与每个类(class)实体相关的成绩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58041719/