首页 > 解决方案 > 对象层次结构的 Fowlers 模式与 RDBMS 映射和 Hibernate 继承策略之间有什么关系?

问题描述

我已经阅读了 Fowler 的模式,它允许决定如何将对象层次结构映射到 RDBMS 并找到 3 个选项。

假设我们有以下层次结构

absract class Parent{...}

class Child extends Parent{....}

class GrandChild extends Child {....}

1.类表继承- 我们将有 3 个表:fotParentChildand GrandChild
2.单表继承- 我们将拥有包含层次结构中所有字段的单表(在这种情况下为 Parent 和 Child 以及 GrandChild)
3.具体表继承- 我们将只有具体类的表 - 在这种情况下为 Child 和 GrandChild

但根据我读过的文章(例如 - https://www.baeldung.com/hibernate-inheritance)有4个选项:

  1. MappedSuperclass– 父类,不能是实体
  2. Single Table– 来自不同类的具有共同祖先的实体被放置在一个表中
  3. Joined Table– 每个类都有自己的表,查询子类实体需要加入表
  4. Table-Per-Class– 一个类的所有属性,都在它的表中,所以不需要连接

显然Flowler的Single Table Inheritance对应Single Table于Hibernate

看起来Flowler的具体表继承对应于HibernateTable-Per-ClassMappedSuperclass

现在我们从一侧和另一侧(休眠)获得了Flowler的类表继承。Joined Table

如您所见,我们有 2 个休眠选项对应于唯一的 Flowler's Concrete Table Inheritance。你能解释一下这些策略之间的区别吗?

标签: javahibernateinheritanceorm

解决方案


推荐阅读