spring-data-jpa 了解在Hibernate中使用3个模型进行实体建模

5jdjgkvh  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(146)

我开始学习Sping Boot 和Hibernate,通过构建小的rest服务。我使用MySQL作为我的数据库。我能够理解Hibernate中使用的关系注解,尽管有时用所有冗长的语法编写起来很棘手。
现在我正在努力如何将3个实体Map在一起。下面是我正在努力实现的。我有一个教师实体,一个年级实体,和一个部门实体。现在,每个年级可以有多个部门。

public class Grade {
   private String name;

   @OneToMany
   private List<Section> sections;
}

public class Section {
   private String name;
}

而且,一个教师可以在多个年级或同一年级的多个部分教学。
想象一下1到5年级,每个年级都有A到D段。
老师,让我们假设约翰可以教一年级(A,B)和二年级(C,D)。
我无法理解实现上述关系的语法。一种方法是使用另一个名为类的实体,它将把等级和部分作为属性。

public class Class {
   private Grade grade;
   private Section section;
}

另一种方式可以是使用类似于X1MON1X的Map数据结构,
尽管如此,我仍然在寻找帮助,用JPA注解写下来。任何线索都很感激。

c7rzv4ha

c7rzv4ha1#

首先,我想指出的是,您的问题并不是针对 Hibernate 的,因为您可以完全依赖JPA规范来完成此任务。但是,Hibernate是Spring的默认ORM,并且默认情况下将在您的程序中实现JPA规范。
第二,我不认为您需要为SectionGrade单独创建数据库表,它们可以建模为简单的Java枚举。在下面的内容中,我快速绘制了一个我想到的类图(不是DB Model!)。

请注意,GradeSectionEnums,以限制输入损坏的值。在数据库中,GradeSection对象可以Map为ordinalStringsee here for reference。我建议通过使用@Enumerated(EnumType.STRING)注解来保持为String。关于Map教师和班级之间的一对多关系,我推荐一个双向关系,如这里所示。但是,请注意,在JPA中有多种方法可以对这种关系进行建模。我希望我能够提供帮助。祝你好运!

相关问题