继承映射分为三种:

  1. 继承结构共用一张表结构
  2. 每个类一张表结构
  3. 每个具体类一张表结构

下面使用Animal、Dog、Fish举例

Animal类如下:

package com.hml.domain.a;

public abstract class Animal {

    private Integer id;
private String name; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }

Dog类如下:

package com.hml.domain.a;

public class Dog extends Animal {

    private float runSpeed;

    public float getRunSpeed() {
return runSpeed;
} public void setRunSpeed(float runSpeed) {
this.runSpeed = runSpeed;
} }

Fish类如下:

package com.hml.domain.a;

public class Fish extends Animal {

    private float swimSpeed;

    public float getSwimSpeed() {
return swimSpeed;
} public void setSwimSpeed(float swimSpeed) {
this.swimSpeed = swimSpeed;
} }

1、继承结构共用一张表

Animal.hbm.xml映射文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hml.domain.a">
<class name="Animal" table="t_animal" discriminator-value="0">
<id name="id">
<generator class="native"></generator>
</id>
<discriminator column="type" type="int"></discriminator>
<property name="name"></property> <subclass name="Dog" discriminator-value="1">
<property name="runSpeed"></property>
</subclass> <subclass name="Fish" discriminator-value="2">
<property name="swimSpeed"></property>
</subclass> </class> </hibernate-mapping>

生成的表结构:

整个继承结构一张表,在映射文件建中通过subclass节点,对子类进行映射。由于整个继承结构一张表,所以在表中需要区分具体是哪个类,所以需要一个鉴别字段,这里通过 discriminator指定,然后在映射类的节点上添加鉴别值,使用这种映射的限制是,子类属性不能有非空约束。

2、每个类一张表

Animal.hbm.xml映射文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hml.domain.a">
<class name="Animal" table="t_animal" >
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"></property> <joined-subclass name="Dog" table="t_dog">
<key column="id"></key>
<property name="runSpeed"></property>
</joined-subclass> <joined-subclass name="Fish" table="t_fish">
<key column="id"></key>
<property name="swimSpeed"></property>
</joined-subclass> </class> </hibernate-mapping>

生成的表结构如下:

t_animal:

t_dog

t_fish

每个类一张表是通过joined-subclass映射子类,joined-subclass中的key是个外键,在基类中存储基类中的信息,然后每个子类生成的表存储本类中的数据。

3、每个具体类一张表

映射文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hml.domain.a">
<class name="Animal" table="t_animal" abstract="true">
<id name="id">
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">100</param>
</generator>
</id>
<property name="name"></property> <union-subclass name="Dog" table="t_dog">
<property name="runSpeed"></property>
</union-subclass> <union-subclass name="Fish" table="t_fish">
<property name="swimSpeed"></property>
</union-subclass> </class> </hibernate-mapping>

每个具体类一张表需要在抽象类上添加abstract="true",不然,抽象了也会生成表的。每个具体类一张表时,主键不能使用自增长,如果使用自增长会报错的。

值得注意的是,继承结构表结构的映射一般不会使用,原因是太复杂,效率低。

Hibernte继承映射的更多相关文章

  1. EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子

    本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discr ...

  2. 【Hibernate框架】三种继承映射

    一.综述 大家都知道,hibernate作为ORM框架的一个具体实现,最大的一个优点就是是我们的开发更加的能体现出"面向对象"的思想.在面向对象开发中,类与类之间是可以相互继承的( ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11  TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...

  4. 《Entity Framework 6 Recipes》中文翻译系列 (36) ------ 第六章 继承与建模高级应用之TPC继承映射

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-12  TPC继承映射建模 问题 你有两张或多张架构和数据类似的表,你想使用TP ...

  5. hibernate笔记--继承映射关系的三种实现方式

    单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...

  6. 【JavaEE】Hibernate继承映射,不用多态查询只查父表的方法

    几个月前,我在博问里面发了一个问题:http://q.cnblogs.com/q/64900/,但是一直没有找到好的答案,关闭问题以后才自己解决了,在这里分享一下. 首先我重复一下场景,博问里面举的动 ...

  7. Hibernate中的继承映射

    1.继承映射 继承映射分为两种情况:简单继承映射和继承映射. 在简单继承映射中,每个子类都要写一个映射文件. 在继承映射中,只使用一个映射文件.继承映射分为三种情况: 所有子类映射到一张表 需要使用鉴 ...

  8. entity framework里的继承映射关系TPH、TPT和TPC

    本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discr ...

  9. 【Hibernate 5】继承映射配置及多态查询

    一.继承实现的三种策略 1.1,单表继承.每棵类继承树使用一个表(table per class hierarchy) -->本文主要介绍的继承策略 类继承树对应多个类,要把多个类的信息存放在一 ...

随机推荐

  1. OC中的属性、方法及内存管理

    普通方法:关注(代表)对象可以”干什么”,过程中需要实例变量.-(void)show;输出 … 访问属性    属性:属性专门处理实例变量.(程序执行过程当中)    初始化方法:一创建对象(第一时间 ...

  2. twitter storm源码走读之2 -- tuple消息发送场景分析

    欢迎转载,转载请注明出处源自徽沪一郎.本文尝试分析tuple发送时的具体细节,本博的另一篇文章<bolt消息传递路径之源码解读>主要从消息接收方面来阐述问题,两篇文章互为补充. worke ...

  3. Linux 计划任务 Crontab 笔记与总结(1)

    Linux 版本:CentOS 6.6 应用场景,例如: ① 每分钟执行一个程序检查系统运行状态 ② 每天凌晨需要对过去一天的业务数据进行统计 ③ 每个星期需要把日志文件备份 ④ 每个月把数据库进行备 ...

  4. jQuery 图片剪裁插件使用之 imgAreaSelect

    插件主页:http://odyniec.net/projects/imgareaselect/ 官方网站上说明支持的浏览器:The plugin works in all major browsers ...

  5. mysql 导入导出.sql文件

    备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...

  6. LR中的编码问题

    [转载]LoadRunner字符集与检查点的探讨 很多人在loadrunner测试脚本中加入中文检查点的时候会出现检查失败的情况,究竟是为什么呢?其实是被测试系统与loadrunner字符集之间的转换 ...

  7. tableView在加载数据成功之前先展示了footerView-医生工作台1期

    一进入这个页面先显示了footreView   解: 发现先走的requestData,但是请求接口成功的回调没走,走了configUI   configUI之后,走了requestData   所以 ...

  8. jira-cli,api,git,jenkins--version.txt

    cd ${WORKSPACE}/trunk/src/main/webapp/html/ echo $version | sed -e "s/X/${BUILD_NUMBER}/g" ...

  9. Dlib is a modern C++ toolkit(非常全面的类库)

    http://dlib.net/ http://download.csdn.net/detail/lajuedan2508/9726225 http://download.csdn.net/detai ...

  10. FastMM、FastCode、FastMove的使用(图文并茂)

    FastMM是一个替换Embarcadero Delphi Win32应用程序的快速内存管理器,以及可以在多线程下使用,不容易产生内存碎片,并且无需使用外部DLL文件就可以支持共享内存. 使用方法:1 ...