Hibernate的继承映射可以理解为两个持久化类之间的继承关系    例如老师和人之间的关系

持久化类  Person类

public  class  Person

{

private   Integer    id;

privvate  String     name;

private    String    sex;

public   Person (){}                //  无参构造器

public   Person(Integer id,String  name, String sex)           // 带参数的构造器

{

this.id = id;

this.name = name;

this.sex   =  sex;

}

.............                                           //省略   id属性  name属性  sex属性  的 setter和getter方法

}

持久化  Teacher类

public  class   Teacher   extends   Person

{                                                           //  继承了父类的全部Field

private   String   className;          //所带班级名

private   String   subject;               //所教科目名

public   Teacher(){}                       //无参构造器

public   Teacher(String id,Sting  name ,String  sex,String  className, String subject)

{

super(id,name,sex);                     //显示调用父类带三个参数的构造器

this.className  = className;

this.subject  =  subject;

}

........//    继承了父类的getter和 setter方法  省略className属性  subject属性的getter和setter方法

}

有三种方式的继承映射 :

1.采用<subclass>元素的继承映射

在这种映射策略下,持久化父类  和 持久化子类 的实例对应的记录都将保存在一张数据表中。该数据表中额外需要增加一个数据列来记录该行记录是哪个类的实例。

这个列被称为辨别者列(discriminator).

该数据表有父类和所有子类的所有属性所对应的数据列   ,哪个对象实例如果没有该列的属性 ,则这个对象实例的对应记录的这列为null

映射文件配置如下 :

<class  name="org.lingtong.pojo.Person" table="tb_person_info"  discriminator-value="普通人">            //discriminator-value属性指定该持久化类的对象的辨别值   如果不写默认为全限定类名

<id  name="id" column="ID">

<generator  class="native">                           //指定主键生成器策略

</id>

<discriminator  column="FLAG"  type="string"  />     //  映射辨别列

....                                                              //省略 name属性 sex属性与对应数据列的映射关系

<subclass  name="org.lingtong.pojo.Teacher"  discriminator-value="老师” />             //discriminator-value属性指定该持久化类的对象的辨别值   如果不写默认为全限定类名

.........                                                //省略 className属性   subject属性与对应数据列的映射关系

//可以继续嵌套子类    但是永远保存在一张表中

</subclass>

</class>

2.采用<joined-subclass>元素的继承映射

采用这种策略  ,父类实例的属性保存在父类表中 ,而子类实例的属性则由父类表和子类表共同存储。将父类和子类共有的属性(即子类通过继承而来的属性)保存在父类表中 ,子类自己扩张增加的属性,则保存在子类表中 。

使用这种映射策略,无需使用辨别者列。但是需要为每个子类表使用<key>元素指定一列去关联父类表的主键列 。<key>元素对应的列 即充当主键又充当外键。

这种关系可以看成“纵向分割映射”

father 类              son类                   grandson类

id                        id                         id

name                  name                    name                                          //则 三个共有属性  形成父类表

sex                      sex                      sex

--------------------------------------------------------------

position                 position                                        //则  两个 子类和孙子类的 共有属性  形成子类表

wife                       wife                                               //需要指定一列 去关联父类表的主键列     (该列既是主键又是外键)

---------------------------------------------------------------

age                                               //则   两个 由孙子类的 特有属性     形成孙子表

sport                                              //需要指定一列   去关联之类表的主键列       (该列既是主键又是外键)

---------------------------------------------------------------

映射文件配置

<class  name="org.lingtong.pojo.Father" table="tb_person_info1"  >            //discriminator-value属性指定该持久化类的对象的辨别值   如果不写默认为全限定类名

<id  name="id" column="ID">

<generator  class="native">                           //指定主键生成器策略

</id>

....                                                              //省略 name属性 sex属性与对应数据列的映射关系

<joined-subclass  name="org.lingtong.pojo.Son"    table="tb_person_info2" />

<key  column="son_id">

.....                                                // 省略  position属性 与 wife属性与对应数据列的映射关系

<joined-subclass  name="org.lingtong.pojo.Son"    table="tb_person_info3" />

<key  column="grandson_id">

......                                    // 省略   age属性 与 sport属性与对应数据列的映射关系

</joined-subclass>

</joined-subclass>

</class>

通过这种映射方式形成的数据表

查询孙子类的实例对象对应的记录时   需要跨越三张表

查询子类的实例对象对应的记录时需要跨越两张表

查阅父类的对象实例对应的记录需要一张表

3.采用<union-subclass>元素的继承映射

"横向分割映射"

转载于:https://www.cnblogs.com/wangliyue/p/4151864.html

Hibernate之继承映射相关推荐

  1. Hibernate读书笔记---继承映射

    对于面向对象的程序设计语言,继承.多态是两个最基本的概念.Hibernate的继承映射可以理解两个持久化类之间的继承关系. Hibernate支持几种继承映射策略,不管哪种继承映射策略,Hiberna ...

  2. hibernate 表关系映射详解之继承关系

    举例:亚马逊的网上商城可以卖很多东西,比如说图书,电器,水果等等,那么我们以面向对象的理念去抽象一个商品类,他具有商品的共有属性,比如说上架时间,当前         价格,优惠价格等待,商品可以继承 ...

  3. 浅析Hibernate映射(三)——继承映射

    对象模型示例: 继承映射的实现方式有三种: (一)每棵类继承树一张表 关系模型: 映射文件: <hibernate-mapping package="com.jialin.hibern ...

  4. Hibernate继承映射

    Hibernate继承映射 在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键 ...

  5. Hibernate第九篇【组件映射、继承映射】

    前言 到目前位置,我们已经学习了一对一.一对多.多对一.多对多映射了-既然Hibernate是ORM实现的框架,它还提供了组件映射和继承映射..本博文主要讲解组件映射和继承映射 Java主要的类主要有 ...

  6. Hibernate→HQL、query.list()返回数据类型、查询相关语句、分页、原生SQL、@注解、持久化对象状态及生命周期、一多关系、继承映射关系、逆向工程

    HQL Query实例与表 session通用工具类 Query对象 from 类→List<类>接收 映射类 仅查询商品 查询商品及所在商家 别名 返回数据类型定义 Iterator接收 ...

  7. Hibernate4继承映射

    Hibernate 支持三种基本的继承映射策略: 1.单表继承:每棵类继承树使用一个表 2.具体表继承:每个子类一个表 3.类表继承:每个具体类一个表(有一些限制) 三种方式的比较: 1.所有类映射成 ...

  8. 第10 章继承映射(InheritanceMappings)

    10.1. 三种策略 Hibernate支持三种基本的继承映射策略: ·每个类分层结构一张表(table per class hierarchy) ·每个子类一张表(table per subclas ...

  9. NHibernate Inheritance Mapping 继承映射

    参考PoEAA,继承的设计模式有:Concrete Table Inheritance(具体表继承).Single Table Inheritance(单表继承).Class Table Inheri ...

最新文章

  1. sim中do文件/memory(readmemb命令符)/移位编写
  2. ASP.NET编译执行常见错误及解决方法汇总之一
  3. 使用宝塔面板部署tp5网站
  4. 【转】Linux入门命令篇(简训)
  5. 使用procd执行进程
  6. MySQL与Python交互入门
  7. s11.1 lsof:查看进程打开的文件
  8. 面试官都会问的Mybatis面试题,你会这样回答吗?
  9. nodejs异步测试_异步过程的自动化测试
  10. mysql bin值总是变化_MySQL|update字段为相同的值是否会记录binlog
  11. java bean参数清空_Java互联网架构-Spring IOC底层源码分析
  12. mysql高级操作_MySQL数据库的高级操作
  13. 苹果修复被 XCSSET 恶意软件滥用的3个 0day
  14. c# Point不能输入小数
  15. 帝国cms+php7.0+mysql_帝国cms切换php7.x登录后台空白解决方法
  16. springboot-aop
  17. Java基础系列—字符串
  18. window10运行不了1stopt_1stopt点击运行没有反应求大佬指点
  19. C#实现的打飞机游戏(课程设计)
  20. 华为笔记本电脑home键和end键快捷方式

热门文章

  1. 浅谈软件自动化集成测试的流程
  2. Microsoft Web 平台安装程序 (Web PI) Microsoft Web Platform Installer
  3. Swift - 使用Alamofire通过HTTPS进行网络请求,及证书的使用
  4. react中ref的使用
  5. org.apache.ibatis.binding.BindingException: Type interface XXX is not known to the MapperRegistry.
  6. 阿里员工离职潮的背后?
  7. IOS初级:UIAlertController
  8. 122112_1452_Word1
  9. ubuntu 目录结构
  10. 正确设置php-fpm和nginx防止网站被黑