创建后端 API 时,通常使用实体关系来组织数据。通常,在课程或教程中,我们大多看到双向关系。但是,如果您希望一个实体独立于另一个实体而存在怎么办?在本文中,我们将探讨如何使用 JPA/Hibernate 的单向关系来实现这一目标。
假设您有两个实体:Student 和 ThesisSchedule。 Student 和 ThesisSchedule 之间的关系是“多对一”,这意味着一个学生可以与一个论文时间表关联,并且每个时间表可以包含多个学生。
在这种情况下,我们的目标是允许创建学生而无需首先定义 ThesisSchedule。这种独立性很有帮助,例如,在创建论文计划之前将学生添加到数据库时。
我们将使用从 Student 到 ThesisSchedule 的单向“多对一”关系来创建 Student 和 ThesisSchedule 类。
学生实体代码:
ThesisShedule 实体代码:
在这里,我们有一个从 Student 到 ThesisSchedule 的单向关系,由 Student 类中的 @ManyToOne 注释指示。通过指定 nullable = true,我们允许创建 Student,而不必与 ThesisSchedule 关联。
让我们看看此设置如何转换为数据库以及如何通过 API 保存数据。
通过此设置,我们可以在不提供 ThesisSchedule 的情况下创建学生。
创建学生的 POST 请求(不含 ThesisSchedule):
这会在 Student 表中创建一个新条目,其中 thesis_schedule_id 列的值为空。
结果:
创建 ThesisSchedule 后,我们可以更新学生记录以与其关联。
创建论文时间表:
这个新创建的 ThesisSchedule 的 ID 可能为 1。
用论文时间表更新学生:
结果:
现在,Larose 已与新创建的 ThesisSchedule 关联。
在某些情况下,从 ThesisSchedule 端管理关系可能更合适。如果我们希望论文时间表管理其关联的学生,跟踪参与特定时间表的学生,那么这种方法非常有用。
在此设置中,ThesisSchedule 持有 Student 的集合来表示“一对多”关系,而 Student 不维护对 ThesisSchedule 的引用。
ThesisSchedule 实体代码:
学生实体代码:
在此配置中,ThesisSchedule 通过 @OneToMany 注释包含一个 Student 列表。因此,可以在 ThesisSchedule 中添加或删除学生,而无需在 Student 中直接链接。
总之,是否在 Student 或 ThesisSchedule 端管理关系取决于您应用程序的具体需求:
两种配置都提供了灵活性,并允许基于所需的数据关系组织良好的后端 API。通过应用最佳实践来构建实体关系,您可以有效地对数据库进行建模,以满足应用程序的特定需求。
单向关系是管理后端 API 中实体之间可选依赖关系的强大选项。
我希望这个解决方案可以帮助其他开发人员更好地理解和使用 JPA/Hibernate 中的单向关系。
以上是JPA 中的关系:创建没有依赖关系的实体的详细内容。更多信息请关注PHP中文网其他相关文章!