首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate的继承映射

对象模型示例: 继承映射的实现方式有以下三种: (一)每棵类继承树一张表 (二)每个类一张表 (三)每个子类一张表 (一)每棵类继承树一张表 关系模型如下: 映射文件如下: ,这里的column,实际上就是父类的主键对应的映射字段名称。...joined-subclass标签,既可以被class标签所包含(这种包含关系正是表明了类之间的继承关系),也可以与class标签平行。...每个子类对应一张表,而且这个表的信息是完备的,即包含了所有从父类继承下来的属性映射的字段(这就是它跟joined-subclass的不同之处,joined-subclass定义的子类的表,只包含子类特有属性映射的字段...这个时候,虽然在union-subclass里面定义的只有子类的属性,但是因为它继承了父类,所以,不需要定义其它的属性,在映射到数据库表的时候,依然包含了父类的所有属性的映射字段。

99540

Entity Framework 继承映射

继承是面向对象开发时经常用到的,但是SQL Server 数据库不具备继承,那么怎么办能?...(Table per Concete class):完全丢弃多态和继承 零、TPH TPH是将整个类层次映射到但表中,该表包含所有类中的所有属性,特定行表示的具体子类通过 discriminator 来标识区分...一、TPT TPT是常用的策略,通过外键来表示继承,父类和子类分别位于不同的表中,子类表包含自身属性列和父类表的外键,并将父表的外键作为子类表的主键。...二、 TPC TPC是不被推荐的策略,因为他会为每个子类创建一个表,并且将父类中的所有属性映射进每个子类表中。...创建TPC映射,需要在上下文中进行如下定义: modelBuilder.Entity().Map(p=>{ p.MapInheritedProperties(); p.ToTable

80110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Hibernate映射继承关系

    在Hibernate中,继承关系的映射可以使用三种方式,分别是单表继承、多表继承和一对一继承。...Hibernate中的实体类是指对应于数据库中一张表的Java类,继承关系的映射将子类和父类的属性映射到同一张表中或者分别映射到不同的表中。...在映射到数据库时,使用表中的一个自增长id来区分子类和父类实体。多表继承多表继承是指每个实体类都映射到不同的表中,这样可以彼此独立地进行操作。...父类和子类之间是基于主键的关系映射,因此,在关系表中需要定义外键来表达继承关系。一对一继承一对一继承是指每个实体类映射到一个表中,同时每个表之间具有一对一的关系映射。...二、单表继承映射示例在本文中,我们将从单表继承开始,展示如何使用Hibernate实现继承关系的映射。下面是两个Java类,我们将使用这两个类来演示单表继承映射

    51930

    初识Hibernate之继承映射

    前面的两篇文章中,我们介绍了两张表之间的各种相互关联映射关系,但往往我们也会遇到两张表甚至多张表之间共有着多个相同的字段。...例如: 如图,student表和teacher表共同具有id,name,age等字段,而我们的继承映射就是这样的一个思想,抽象出这些共有的字段为一张父表,让子表对其进行继承,这样就可以大大降低我们实体类代码的冗余性...下面我们通过插入操作了解这种映射策略对具体数据库的实际操作。...使用这种策略方式映射数据表只会生成一张表,但是很大的一个问题是,当很多张表进行集成的时候会导致表结构复杂混乱。...至此,有关继承映射的三个策略已经介绍结束,总结不到之处,望指出。

    81280

    【SSH快速进阶】——Hibernate继承映射:每棵继承映射一张表

    blog.csdn.net/huyuyang6688/article/details/50680899   我们都知道,Hibernate最大的一个优点就是使开发更加“面向对象”,类与类之间有继承关系...,Hibernate中也对这种继承关系提供了映射的封装。   ...Hibernate为继承映射提供了三种策略   1、每棵继承树使用一张表   2、每个子类使用一张表   3、每个具体类使用一张表   本文对第一种策略进行说明。...上图中Pig类和Bird类继承Animal类,每棵继承树对应一张表,即在同一棵继承树中,所有的类的对象信息(记录)共同存放到一张表中,要判断某条记录属于哪个对象,需要在表中添加一个字段进行区分(比如下表的...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每棵继承映射一张表》】

    39120

    【SSH快速进阶】——Hibernate继承映射:每个类映射一张表

    https://blog.csdn.net/huyuyang6688/article/details/50689003   上文说了每棵继承映射一张表,本文继续描述让每个类都映射一张表的配置...上图中Pig类和Bird类继承Animal类,要让每个类映射一张表,就是让着三个类都分别映射一张表,但同时这三张表也跟对应的三个类似的,有继承关系,在父类对应的表中,实际上会存储所有子类对应的记录,如下表所示...所以对对象的操作同上篇文章《【SSH快速进阶】——Hibernate继承映射:每棵继承映射一张表》中的测试一致。...总结 ----   缺点:查询时需要关联表,效率差;插入时也要执行多个insert语句,适合继承程度不深的情况。   优点:粒度较细,调理清楚,没有冗余。   ...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每个类映射一张表》】

    39830

    【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表

    上图中Pig类和Bird类继承Animal类,要让每个具体类映射一张表,就是只映射Pig和Bird,如下表所示:                        (表 1) ?   ...  配置映射文件时,父类还用标签来定义即可;用标签定义两个子类,且每个类对应的表的信息是完全的,包含了所有从父类继承下来的属性。...:每棵继承映射一张表》中的测试一致。   ...【Hibernate继承映射综合分析】   如果系统需要经常进行查操作且子类数量较多,则建议用第一种方案,即每棵生成树映射一张表,这也是最常用的方法,效率较高。   ...---- 【 转载请注明出处——胡玉洋《【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表》】

    44140

    ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射

    实体继承是基于OO和关系型数据库软件系统设计中的一个重要主题。本文通过基于NBear的实例解析ORM中的实体继承体系映射的方方面面。 本文涉及的内容包括: 1. 单表继承体系 2....接口实现映射vs基类继承映射 1. 单表继承体系 所谓单表继承体系就是用一张数据库表存储整个继承体系中的所有实体的数据。...接口实现映射vs基类继承映射 目前的ORM方案,似乎比较少讨论到一个OOD中非常重要的方面——接口。当绝大多数ORM事先都能较好的映射常见的单根继承关系时,却往往忽略(回避?)了接口的地位。 ...前面我们已经讨论了各种常见的ORM中的继承体系映射方案,我们会发现,单从映射的灵活性,自然程度来讲,一实体一扩展表方案无疑最自然。...分析其原因,是因为,它就和我们在OO中定义继承体系中的类一样,子类只需定义扩展的部分,无需重复包含父类已经定义的属性。  OK,那么,和基类继承映射相比,接口处在一个什么地位呢?

    2.5K90

    C++:13---继承(单一继承、多重继承、多级继承、菱形继承、虚继承

    ; ③一个类不能派生其自身,原因和②是相同的 三、继承的基本特点 ①一个类可以被多个类继承 ②一个类也可以继承于多个类 四、单一继承 一个类只继承于一个类叫做单一继承 class A { }; class...B :public A //单一继承 { }; 五、多重继承 一个类只继承于多个类叫做多重继承 class A{}; class B {}; class C :public B, public...A //多重继承 { }; 六、多级继承 一个子类还可以作为另一个类的父类而派生出另一个子类。...最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性...虚继承的作用:为了保证公共继承对象在创建时只保存一分实例 虚继承解决了菱形继承的两个问题: 数据冗余:顶级基类在整个体系中只保存了一份实例 访问不明确(二义性):可以不通过作用域访问符::来调用(原理就是因为顶级基类在整个体系中只保存了一份实例

    3.7K30

    【Python】面向对象 - 继承 ① ( 继承概念 | 继承语法 | 单继承与多继承 | 代码示例 )

    一、继承简介 1、继承概念 继承 是 面向对象 特性之一 , ( 封装 - 继承 - 多态 ) 继承 可以 令一个类 从 另一个类 中 继承 该类的 属性 和 方法 , 继承 属性 和 方法 的类被称为..." 子类 " , 被 继承 的类 称为 " 父类 " 或 " 基类 " ; 2、继承语法 继承语法 : class 子类类名(父类类名): 子类内容 父类类名 是 已经存在的 父类 或 基类 的名称...; 子类类名 是 本次新创建的类类名 ; 该 子类 继承了 父类 所有的 成员属性 和 成员方法 ; 3、单继承与多继承继承 指的是 一个子类 继承 一个父类 ; 多继承 指的是 一个子类 继承...多个父类 ; 多继承语法 : class 子类类名(父类类名1, 父类类名2, .... , 父类类名n): 子类内容 二、代码示例 1、代码示例 - 单继承 父类 Animal 描述动物 , 只有...Process finished with exit code 0 2、代码示例 - 多继承 定义两个父类 : Animal 和 Walk ; class Animal: def __init

    15410

    【C++】继承(定义、菱形继承、虚拟继承

    继承关系和访问限定符 继承基类成员访问方式的变化 记忆方法:基类的私有成员,无论哪种方式继承,在派生类中都是不可见。基类其他成员在子类的访问方式,取基类成员的访问限定符和继承方式中小的一个。...继承与友元 友元关系不能继承,也就是说基类友元不能访问子类私有和保护成员 。 继承与静态成员 基类定义了static静态成员,则整个继承体系里面只有一个这样的成员。...复杂的菱形继承及菱形虚拟继承继承:一个子类只有一个直接父类时称这个继承关系为单继承继承:一个子类有两个或以上直接父类时称这个继承关系为多继承 菱形继承:菱形继承是多继承的一种特殊情况。...如上面的继承关系,在Student和 Teacher的继承Person时使用虚拟继承,即可解决问题。...上图也是菱形继承,virtual要放在继承了公共基类的地方。 继承的总结和反思 一般不建议设计出多继承,一定不要设 计出菱形继承。否则在复杂度及性能上都有问题。

    14110

    C++继承(多继承、菱形继承?)

    注意:若不写继承方式,默认就是 private 继承! 2....复杂的菱形继承与菱形虚拟继承 1.菱形继承的概念以及问题 单继承:一个子类只有一个直接父类时称这个继承关系为单继承继承:一个子类有两个或以上直接父类时称这个继承关系为多继承继承中指针偏移的一道题...下面是上面的Person关系菱形虚拟继承的原理解释: Ⅸ. 继承与组合 继承和组合 public继承是一种 is-a 的关系。也就是说每个派生类对象都是一个基类对象。...不过继承也有用武之地的,有些关系就适合继承那就用继承,另外要实现多态,也必须要继承。类之间的关系可以用继承,可以用组合,就用组合。...继承的总结和反思 很多人说 C++ 语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承

    2K20

    【C++】继承 ⑪ ( 多继承 | 多继承语法 | 多继承案例 )

    一、多继承 1、多继承基本语法 多继承 概念 : 一个 子类 ( 派生类 ) 可以 继承 多个 父类 ( 派生类 ) ; 一个类可以继承多个类的属性和方法 ; 使用多继承 , 可以创建更复杂的类 ,...该派生类可以组合多个基类的功能 ; 只有 C++ 语言有多继承概念 , 别的语言没有该概念 ; Java 语言只能继承一个父类 , 可以实现多个接口 ; 多继承语法 : class 子类名称 : 访问控制关键字...访问控制关键字 父类名称n { // 子类内容 } 访问控制关键字 : public : 表示 公有继承 ; protected : 表示 保护继承 ; private : 表示 私有继承 ; 继承的...每个 父类 都可以指定一个 访问控制关键字 ; 2、多继承子类构造初始化 调用多个父类构造函数 : 如果一个 子类 ( 派生类 ) 继承多个 父类 ( 基类 ) , 使用 初始化列表 调用 多个 父类...可以直接访问 ; 成员变量 名称 相同 , 就需要使用 父类 :: 成员变量名 或 爷爷类 :: 成员变量名 进行访问 ; 二、多继承案例 ---- 1、代码示例 - 简单多继承案例 在下面的代码中 ,

    23530

    继承

    1.2.3继承基类成员访问方式的变化 类成员/继承方式 public继承 protected继承 private继承 基类的public成员 派生类的public成员 派生类的protected成员 派生类的...7.复杂的菱形继承及菱形虚拟继承继承:一个子类只有一个直接父类时称这个继承关系为单继承 ? 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承 ?...菱形继承:菱形继承是多继承的一种特殊情况。 ? 菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。 ?...如上面的继承关系,在Student和Teacher的继承Person时使用虚拟继承,即可解决问题。...不过继承也有用武之地的,有些关系就适合继承那就用继承,另外要实现多态,也必须要继承。类之间的关系可以用继承,可以用组合,就 用组合。

    78220
    领券