千家信息网

Hibernate继承映射策略有哪些

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"Hibernate继承映射策略有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hibernate继承映射策略有哪些"吧!Hibern
千家信息网最后更新 2026年11月01日Hibernate继承映射策略有哪些

本篇内容主要讲解"Hibernate继承映射策略有哪些",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Hibernate继承映射策略有哪些"吧!

Hibernate继承映射的英文是Inheritance Mappings,Hibernate继承映射有三种策略。
Hibernate支持三种基本的继承映射策略:

◆每个类分层结构一张表(table per class hierarchy)

◆每个子类一张表(table per subclass)

◆每个具体类一张表(table per concrete class)

此外,Hibernate还支持第四种稍有不同的多态映射策略:

隐式多态(implicit polymorphism)

对于同一个继承层次内的不同分支,可以采用不同的映射策略,然后用隐式多 态来完成跨越整个层次的多态。但是在同一个根元素 下,Hibernate不支持混合了元素、 和 的映射。在同一个元素下,可以混合使用 "每个类分层结构一张表"(table per hierarchy) 和"每个子类一张表"(table per subclass) 这两种映射策略,这是通过结合元素和 来实现的(见后)。

1. 每个类分层结构一张表(Table per class hierarchy)

假设我们有接口Payment和它的几个实现类: CreditCardPayment, CashPayment, 和ChequePayment。则"每个类分层结构一张表"(Table per class hierarchy)的映射代码如下所示:

                                  ...                        ...                    ...                    ...       

采用这种策略只需要一张表即可。它有一个很大的限制:要求那些由子类定义的字段, 如CCTYPE,不能有非空(NOT NULL)约束。

2. 每个子类一张表(Table per subclass)

对于上例中的几个类而言,采用"每个子类一张表"的映射策略,代码如下所示:

                             ...                        ...                                      ...                             ...       

需要四张表。三个子类表通过主键关联到超类表(因而关系模型实际上是一对一关联)。

3. 每个子类一张表(Table per subclass),使用辨别标志(Discriminator)

注意,对"每个子类一张表"的映射策略,Hibernate的实现不需要辨别字段,而其他 的对象/关系映射工具使用了一种不同于Hibernate的实现方法,该方法要求在超类 表中有一个类型辨别字段(type discriminator column)。Hibernate采用的方法更 难实现,但从关系(数据库)这点上来看,按理说它更正确。若你愿意使用带有辨别字 段的"每个子类一张表"的策略,你可以结合使用 与,如下所示:

                                  ...                                         ...                                          ...                                          ...                

可选的声明fetch="select",是用来告诉Hibernate,在查询超类时, 不要使用外部连接(outer join)来抓取子类ChequePayment的数据。

4. 混合使用"每个类分层结构一张表"和"每个子类一张表"

你甚至可以采取如下方法混和使用"每个类分层结构一张表"和"每个子类一张表"这两种策略:

                                  ...                                         ...                             ...                    ...       

对上述任何一种映射策略而言,指向根类Payment的 关联是使用进行映射的。

5. 每个具体类一张表(Table per concrete class)

对于"每个具体类一张表"的映射策略,可以采用两种方法。***种方法是使用 。

                             ...                        ...                    ...                    ...       

这里涉及三张表。每张表为对应类的所有属性(包括从超类继承的属性)定义相应字段。

这种方式的局限在于,如果一个属性在超类中做了映射,其字段名必须与所有子类 表中定义的相同。(我们可能会在Hibernate的后续发布版本中放宽此限制。) 不允许在联合子类(union subclass)的继承层次中使用标识生成器策略(identity generator strategy), 实际上, 主键的种子(primary key seed)不得不为同一继承层次中的全部被联合子类所共用.

6. Table per concrete class, using implicit polymorphism
另一种可供选择的方法是采用隐式多态:

                             ...                                 ...                                 ...  

注意,我们没有在任何地方明确的提及接口Payment。同时注意 Payment的属性在每个子类中都进行了映射。如果你想避免重复, 可以考虑使用XML实体(例如:位于DOCTYPE声明内的 [ ] 和映射中的&allproperties;)。

这种方法的缺陷在于,在Hibernate执行多态查询时(polymorphic queries)无法生成带 UNION的SQL语句。

对于这种映射策略而言,通常用来实现到 Payment的多态关联映射。

                          

7. 隐式多态和其他继承映射混合使用

对这一映射还有一点需要注意。因为每个子类都在各自独立的元素 中映射(并且Payment只是一个接口),每个子类可以很容易的成为另一 个继承体系中的一部分!(你仍然可以对接口Payment使用多态查询。)

                                  ...                                      ...                                 ...                                      ...       

我们还是没有明确的提到Payment。 如果我们针对接口Payment执行查询 --如from Payment-- Hibernate 自动返回CreditCardPayment(和它的子类,因为 它们也实现了接口Payment)、 CashPayment和Chequepayment的实例, 但不返回NonelectronicTransaction的实例。

到此,相信大家对"Hibernate继承映射策略有哪些"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

子类 策略 方法 多态 结构 元素 字段 接口 查询 层次 属性 关联 混合 辨别 不同 实际 支持 代码 内容 实例 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 云信互联网科技有限公司 互联网科技官网 互联网科技行业发展 深圳互联网科技公司 汇久创客互联网科技 互联网 新科技 顺网科技2021年互联网排名 茂名市互联网科技产业园 岳阳华臻互联网科技有限公司 想开互联网科技公司怎么样 浙南科技城互联网大厦建设工程 乌鲁木齐新华智原互联网科技学校 内蒙古九一互联网科技 互联网科技实习生岗位 广州有谷有贝互联网科技有限公司 互联网科技接地气 陕西九四连强互联网科技有限公司 深圳互联网科技园地址 互联网科技快速发展优美句子 互联网科技公司 厦门中拓互联网络科技有限公司 网络科技有限互联网 时间互联网络科技 互联网养老 桔豆科技 衡水科技产业互联网平台 山东吉时兔互联网科技有限公司 佳云科技和互联网广告 本届互联网大会上的黑科技 东风日产互联网科技公司叫什么
0