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. SDL2.0的VS开发环境搭建

    SDL2.0的VS开发环境搭建 [前言] 我是用的是VS2012,VS的版本应该大致一样. [开发环境搭建] >>>SDL2.0开发环境配置:1.从www.libsdl.org 下载 ...

  2. AD组策略添加本地账号、设置允许ping回显

    AD组策略添加本地账号 1. 管理工具--组策略管理--选择相应GPO(编辑)----首选项--控制面板设置--本地用户和组--右键添加账号 2.域成员计算机刷新组策略(gpupdate/force) ...

  3. 显示win7桌面网络.reg

    显示win7桌面网络.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\C ...

  4. Lecture Notes: Macros

    原论文链接失效,特在这里保存一份 http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html Lisp functions take Lisp values ...

  5. 编程获得CPU的主频

    CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed).CPU的主频表示在CPU内数字脉冲信号震荡的速度.主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者 ...

  6. onclick="test()"与onclick="return test()"的区别

    浏览器会对页面元素的某些操作产生默认行为比如a标签跳转,form表单的提交等如果是onclick="test()"则执行该函数,然后继续自己的默认行为 <a href=&qu ...

  7. NCrawler 学习

    NCrawler是一款国外的开源网络爬虫软件,遵循LGPL许可协议.其HTML处理使用的是htmlagilitypack开源库,采用xpath的方式处理定位网页元素,十分方便.同时其采用HttpWeb ...

  8. 笔记3:关于VBS整人代码的浅谈

    今天又看到有人在群里刷屏了.就想到了以前玩过的发QQ骚扰信息程序了.其实蛮简单的 和网上很多的整人代码差不多 一.直接在网上搜索“VBS整人代码”,然后找到有用的代码复制着. ps:在网上有很多有意思 ...

  9. 整理的一些模版LCS(连续和非连续)

    对于连续的最大串,我们称之为子串....非连续的称之为公共序列.. 代码: 非连续连续 int LCS(char a[],char b[],char sav[]){ int lena=strlen(a ...

  10. iOS 常见 Crash 及解决方案

    一.访问了一个已经被释放的对象 在不使用 ARC 的时候,内存要自己管理,这时重复或过早释放都有可能导致 Crash. 例子 NSObject * aObj = [[NSObject alloc] i ...