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. git使用技巧

    git使用技巧 转载自:http://172.17.144.8/iceway.zhang/shares/201604/201604_git_tips.md.html 我们在工作中几乎每天都会用到git ...

  2. hdu1907(anti-sg入门)

    改变了下规则,现在变成了最后拿的人输. 如果对于单纯的nim的话,只需要判断每堆都是1个石子的特殊情况. 因为如果存在有大于1个石子的堆话,类似于nim的取法,处于必胜状态的一方只需要在 对方取完后只 ...

  3. 解决Win7中第一次HttpWebRequest连接缓慢、超时等问题

    在使用HttpWebRequest的时候发现,第一次连接需要15S左右,我的系统是win7,很崩溃,除了我那个用户可以等待的了,但是第二次,就没有问题了,于是百度之...... http://www. ...

  4. azure git 托管

    azure git上传部署步骤:(首次提交)cd 至本地代码路径git initgit add .git commit –m "initial commit"git remote ...

  5. 联想VIBE UI 固件ROM刷机包集合

    固件下载_联想乐问吧http://ask.lenovomobile.com/?c-157.html 联想VIBE UI 固件ROM刷机包集合 悬赏分:0     解决时间:2014/09/12 15: ...

  6. mac air/pro 启用三指拖动手势

    mac air/pro 启用三指拖动手势 一直以来用mac触控版丰富的手势来完成日常的工作,非常的效率和方便! 今天重新安装了系统发面三指拖动不好用了! 仔细查看了 设置--触控板 里面的各种选择尝试 ...

  7. 使用Visual Studio制作安装包

    目 录 第1章 合并模块    3 1.1 SystemDll    3 1.1.1 收集文件    3 1.1.2 新建项目    4 1.1.3 增加自定义文件夹    4 1.1.4 设置部署位 ...

  8. worker中加载本地文件报错的解决方案

    如果在一个swf的主线程中加载文件时,报安全沙箱的错误, 网上有诸多的解决方案.但是如果在一个worker中加载本地文件报类似如下的错误: *** 安全沙箱冲突 *** SecurityError: ...

  9. 微信JS SDK Demo 官方案例

    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享 ...

  10. python 练习 14

    方法一 #!/usr/bin/python # -*- coding: UTF-8 -*- def fib(n): a,b = 1,1 for i in range(n-1): a,b = b,a+b ...