1.继承映射

  继承映射分为两种情况:简单继承映射和继承映射。

  在简单继承映射中,每个子类都要写一个映射文件。

  在继承映射中,只使用一个映射文件。继承映射分为三种情况:

  所有子类映射到一张表

    需要使用鉴别器字段,不符合数据库设计原则

  每个类映射到一张表

    父类映射到一张表,插入一条子类信息,需要两条sql,父子表之间有外键约束

  每个类映射到一张表,父类不映射表

    必须使用uuid作为主键类型,所以bean中主键对应的属性不能是int类型    

2.简单继承映射

<?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.juaner.hibernate.extendMap">
<class name="Cat" table="t_cat">
<!--简单继承映射-->
<id name="id">
<generator class="native"/>
</id>
<property name="name" length="25" type="string"/>
<property name="catchMouse" length="25"/>
</class> </hibernate-mapping>

  在这种情况下,获取数据的时候,当写HQL查询时,通过父类查询必须写类的全名:

    @Test
public void test1(){
Session session = sf.openSession();
session.beginTransaction(); //获取的时候,当写hql查询的时候,通过父类查询必须写上类的全名
Query query = session.createQuery("from com.juaner.hibernate.extendMap.Animal");
List<Animal> list = query.list();
for(Animal animal:list){
System.out.println(animal);
} session.getTransaction().commit();
session.close();
}

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.juaner.hibernate.extendMap">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native"/>
</id>
<!--指定鉴别器字段,用于区别子类信息
必须放到id下面,property上面
如果不指定具体值,默认为当前子类的全名
-->
<discriminator column="type_"/>
<property name="name" length="25" type="string"/>
<!--子类信息-->
<subclass name="Cat" discriminator-value="cat_">
<property name="catchMouse" length="25"/>
</subclass>
<subclass name="Monkey" discriminator-value="monkey_">
<property name="eatBanana" length="25"/>
</subclass>
</class>
</hibernate-mapping>

  生成的表:

4.每个类映射到一张表

<?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.juaner.hibernate.extendMap">
<class name="Animal" table="t_animal">
<id name="id">
<generator class="native"/>
</id> <property name="name" length="25"/>
     <!--需要设置外键约束-->
<joined-subclass name="Cat" table="t_cat">
<key column="animal_id"></key>
<property name="catchMouse" length="25"/>
</joined-subclass>
<joined-subclass name="Monkey" table="t_monkey">
<key column="animal_id"></key>
<property name="eatBanana"/>
</joined-subclass>
</class>
</hibernate-mapping>

  执行的sql语句

Hibernate: insert into t_animal (name) values (?)
Hibernate: insert into t_cat (catchMouse, animal_id) values (?, ?)
Hibernate: insert into t_animal (name) values (?)
Hibernate: insert into t_monkey (eatBanana, animal_id) values (?, ?)

5.每个类映射到一张表,父类不映射表

<?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.juaner.hibernate.extendMap">
<class name="Animal">
<id name="id">
<generator class="uuid"/>
</id>
<property name="name" length="25"/>
<!--每个子类的表的主键为id列,但是主键不能为自增长的-->
<union-subclass name="Cat" table="t_cat">
<property name="catchMouse" length="25"/>
</union-subclass>
<union-subclass name="Monkey" table="t_monkey">
<property name="eatBanana" length="25"/>
</union-subclass>
</class> </hibernate-mapping>

Hibernate中的继承映射的更多相关文章

  1. Hibernate中的一对一映射关系

    Hibernate中的一对一映射关系有两种实现方法(单向一对一,和双向一对一)(一对一关系:例如一个department只能有一个manager) 单向和双向有什么区别呢??例如若是单向一对一,比如在 ...

  2. HIbernate学习笔记(七) hibernate中的集合映射和继承映射

    九.       集合映射 1. Set 2. List a)        @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...

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

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

  4. 【Hibernate步步为营】--继承映射具体解释

    上篇文章讨论了多对多映射,在使用多对多映射时重点是使用<many-to-many>标签,并在标签的两端加入外键这样在生成关系时会创建两个关系之间的关系表,通过关系表来维护它们之间的关系,另 ...

  5. Hibernate总结(二)---hibernate中的各种映射

    知识的准备: (参考:汤阳光Hibernate3.6(基础)) 一.浅谈javaBean之间的关系 存在的关系: 1.关联(一对一.一对多.多对一.多对多) 2.聚合/组合(最后考虑) 3.继承 所以 ...

  6. Hibernate 中对象关系映射(ObjectRelationMapping)

    1.什么是对象关系映射? 解析:对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说, ...

  7. Hibernate中的组合映射

    1.实体bean设计 car: public class Car { private int id; private String name; private Wheel wheel; set... ...

  8. Hibernate中一对一关联映射/组件映射

    Hibernate映射:一对一关联 1.按照外键映射 2.按照主键映射 组件映射 下面以员工账号表和员工档案表(员工账号和档案表之间是一对一的关系)为例,介绍这两种映射关系,并使用这两种 映射方式分别 ...

  9. Hibernate中的一对一映射

    1.需求 用户和身份证是一一对应的关系. 有两种对应方式: 用户id作为身份证表的外键,身份证号作为主键: 用户id作为身份证表的主键: 2.实体Bean设计 User: public class U ...

随机推荐

  1. iOS 开发之 Xcode6 打包生成ipa给测试

    Xcode 6正式版Version 6.0.1 (6A317)已经放出Mac AppStore,之前为了体验swift也安装过beta版,但是并没有注意到6系Xcode对于导出ipa的变化,更新正式版 ...

  2. openfire过滤脏话插件,控制消息是否发送

    参考:http://myopenfire.com/article/getarticle/9 package com.myopenfire.plugin; import java.io.File; im ...

  3. Android控件之ToggleButton(多状态按钮)

    一.概述 ToggleButton有两种状态:选中状态和没选中状态(类似一个开关),并且需要为不同的状态设置不同的显示文本 二.ToggleButton属性 android:checked = &qu ...

  4. HM中再增加一路自己的entropy coder

    compressSlice 中一开始的entropy coder 设置: // set entropy coder if( m_pcCfg->getUseSBACRD() ) { m_pcSba ...

  5. foreach 相关

    20 Nov 08 深入理解PHP原理之foreach 作者: Laruence(   ) 本文地址: http://www.laruence.com/2008/11/20/630.html 转载请注 ...

  6. 绑定事件 addEventListener

    addEventListener() 方法用于向指定元素添加事件句柄. addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄. 你可以向一个元素添加多个事件句柄. 你可以向 ...

  7. jQuery与DOM相互转换

    先执行一下代码 $(function () { var div=$("<div></div>"); console.log(div); }); (注意,di ...

  8. 20145218 《Java程序设计》第三周学习总结

    20145218 <Java程序设计>第三周学习总结 教材学习内容总结 定义类 编写程序要产生对象就要先定义类.类是对象的设计图,对象是类的实例.类定义时使用class关键词,建立实例时, ...

  9. robotframework笔记26

    测试数据文档工具(Testdoc) Testdoc是机器人框架内置的工具生成高水平 根据测试用例文档. 创建的文档是在HTML中 格式和它包括名称.文档和其他元数据 测试套件和测试用例,以及和他们的顶 ...

  10. SQL SERVER类型与C#类型对照

      SQL SERVER类型   C#类型 精确数字 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数 ...