java - 我应该如何对数据库进行建模,以便数据库中的每个学生实体都有与每个类(class)实体相关的成绩?

标签 java database hibernate object mapping

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

相关文章:

java - 如何在 EMF 中通过代码实现模型?

java - 如何给数组中的对象赋值?

php - 如何将文本文件直接或通过 PHP 导入 MySQL

iphone - 从 iOS 的 WebService(Json/XML) 同步数据库 (sqlite)

java - 如何处理查询中没有值且数据类型为整数的字段返回的空值

java - 从十六进制值获取各个字节

java - GWT 和不可重现的 503 错误

php - 将数千条相关记录导入到 Rails 应用程序中?

java - 使用 hibernate 支持多数据库

java - @事务回滚不起作用