java - 对象层次结构的 Fowlers 模式与 RDBMS 映射和 Hibernate 继承策略之间有什么关系?
问题描述
我已经阅读了 Fowler 的模式,它允许决定如何将对象层次结构映射到 RDBMS 并找到 3 个选项。
假设我们有以下层次结构
absract class Parent{...}
class Child extends Parent{....}
class GrandChild extends Child {....}
1.类表继承- 我们将有 3 个表:fotParent
和Child
and GrandChild
2.单表继承- 我们将拥有包含层次结构中所有字段的单表(在这种情况下为 Parent 和 Child 以及 GrandChild)
3.具体表继承- 我们将只有具体类的表 - 在这种情况下为 Child 和 GrandChild
但根据我读过的文章(例如 - https://www.baeldung.com/hibernate-inheritance)有4个选项:
MappedSuperclass
– 父类,不能是实体Single Table
– 来自不同类的具有共同祖先的实体被放置在一个表中Joined Table
– 每个类都有自己的表,查询子类实体需要加入表Table-Per-Class
– 一个类的所有属性,都在它的表中,所以不需要连接
显然Flowler的Single Table Inheritance对应Single Table
于Hibernate
看起来Flowler的具体表继承对应于HibernateTable-Per-Class
MappedSuperclass
现在我们从一侧和另一侧(休眠)获得了Flowler的类表继承。Joined Table
如您所见,我们有 2 个休眠选项对应于唯一的 Flowler's Concrete Table Inheritance。你能解释一下这些策略之间的区别吗?
解决方案
推荐阅读
- kotlin - 如何将谓词应用于一个数组并使用结果从 Kotlin 中的另一个数组中获取值
- java - 如何从 Angular 获取数据到 Core JSP?
- c++ - CMake find_package 在不同环境中使用不同的搜索路径
- python - 使用来自 json 数据集 Pandas 的行值在特定条件下更改行值
- jquery - 追加新行时,JQuery Datepicker 不起作用 - JQuery UI
- android - 在 /data/app-lib/ 中找不到 JNI_OnLoad + 0x2d000005 处的致命信号 11 (SIGSEGV) (code=1)
- logstash - Logstash - 加入两个字典
- java - 如何使用 Selenium 从框架中编写控制台日志?
- php - 如何从 3 个表中获取数据库中的所有数据?
- javascript - 使用 Service Worker 加载外部文件时出错