`
Ryan200909
  • 浏览: 8940 次
社区版块
存档分类
最新评论

Hibernate中数据库表的继承关系

阅读更多

继承这个词多半用在OOP编程里,比如类的继承,但是在Hibernate里表也有继承关系,这也难怪,因为Hibernate的目的就是要把数据库对象化。

   先来看一个简单的例子,一个人员表Person,这张表里主要纪录一些公司人员的基本信息;还有一张用户表User,这张表纪录的是公司里的人员登陆公司网站的用户名信息表;很显然用户来源于人员,一个人员可以有多个用户,而一个用户只对应一个人员,这样User这张表就可以继承Person这张表了,因为它完全符合继承关系的条件,即User是在Person的基础上扩展而来的。

   下面我们看看上例Hibernate里的HBM XML文件和POJO类是怎么写的,先看HBM XML文件的写法:

<class name="org.user.dao.hibernate.Person" table="person">

    <id name="id" column="id"><generator class="increment" /></id>

 

    <property name="firstName" column="firstname" length="30"/>

    <property name="lastName" column="lastname" length="30"/>

   

    <joined-subclass name="org.user.dao.hibernate.User" table="user">

      <key column="person_id"/>

      <property name="id" column="id"/>   

      <property name="userName" column="user_name"/>

    </joined-subclass>

</class>

这个XML文件体现了PersonUser的继承关系,如果你还是不太清楚地话,看下面的POJO类,那可是百分之百的继承关系了:

package org.user.dao.hibernate;

import java.io.Serializable;

public class Person implements Serializable {

    private static final long serialVersionUID = 6254796603241870646L;

   private long id;

    private String firstName;

    private String lastName;

    public Person() {

    }

    public String getFirstName() {

        return this.firstName;

    }

    public void setFirstName(String firstName) {

        this.firstName = firstName;

    }

   public String getLastName() {

        return this.lastName;

    }

   public void setLastName(String lastName) {

        this.lastName = lastName;

    }

    public long getId() {

        return id;

    }

    public void setId(long id) {

        this.id = id;

    }

}

User类的写法:

package org.user.dao.hibernate;

public class User extends Person {

       private static final long serialVersionUID = 2848034506633654174L;

       private String userName;

       public User() {

       }

       public String getUserName() {

              return this.userName;

       }

      public void setUserName(String userName) {

              this.userName = userName;

       }

}

至此Hibernate里数据库表的继承关系就完全展示出来了。Hibernate里使用映射文件(HBM XML文件)和POJO类来完全封装数据库,使数据库完全对象化,而我们在写程序操作数据库时也完全像操作一个对象一样,这样数据库表的继承关系也表现的非常自然了。

分享到:
评论

相关推荐

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate对应关系详解

    对于hibernate的9中对应关系的代码详解和继承关系数据库表结构设计

    Hibernate映射继承关系的三种方案.docx

    在一些项目中,会采用集成的关系来定义数据库实体类,比如:人(Person)与学生(Student),学生来源与人,所以人的基本属性学生也拥有;但学生有的一些属性,人就不具有。人与学生之间很显然就拥有了继承关系 ------...

    可以用来被继承的用Hibernate连接数据库的GenericDAO类(转)

    方便你使用的abstract类,继承起来非常方便

    精通Hibernate之映射继承关系(三)

    这种映射方式只需为继承关系树的Employee根类创建一张表EMPLOYEES。如图14-4所示,在EMPLOYEES表中不仅提供和Employee类的属性对应...图14-5显示了持久化类、映射文件和数据库表之间的对应关系。图14-5持久化类、映射文

    Hibernate3.1_学习源码

    03 03Hibernate_Component : 实体细粒度的划分,数据库中的一张表在程序中划分为几个部分的实体,配置文件和增、删、改、查的使用。 04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计...

    Hibernate+中文文档

    5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.5. composite-id 5.1.6. 鉴别器...

    Hibernate Annotations 中文文档

    2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一...

    hibernate3.2中文文档(chm格式)

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    Android数据库hibernate框架.

    * ,增改支持对象化操作:增删改是数据库操作的最基本单元,不用重复写这些增删改的代码,并且添加和更新支持类似于hibernate中的对象化操作. * 3.查询方式灵活:支持android框架提供的方式,也支持原生sql方式. * 4....

    Hibernate中文详细学习文档

    符合Java习惯的关系数据库持久化 前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. ...

    hibernate annotation 中文文档

    2.2.4. 映射继承关系 2.2.4.1. 每个类一张表 2.2.4.2. 每个类层次结构一张表 2.2.4.3. 连接的子类 2.2.4.4. 从父类继承的属性 2.2.5. 映射实体Bean的关联关系 2.2.5.1. 一对一(One-to-one) 2.2.5.2. 多对一(Many-to-...

    Hibernate 中文 html 帮助文档

    5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.1.1. EntityResolver 5.1.2. hibernate-mapping 5.1.3. class 5.1.4. id 5.1.4.1. Generator 5.1.4.2. 高...

    Hibernate实战(第2版 中文高清版)

     1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不匹配   1.2.1 粒度问题   1.2.2 子类型问题   1.2.3 同一性问题   1.2.4 与关联相关...

    精通Hibernate之映射继承关系(四)

    在这种映射方式下,继承关系树的每个类以及接口都对应一个...图14-6继承关系树的每个类对应一个表图14-7持久化类、映射文件和数据库表之间的对应关系14.3.1创建映射文件从Company类到Employee类是多态关联,由于关系数

    彻底解决hibernate常见难点.zip

    N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在Spring中、事务...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     12.1 继承关系树的每个具体类对应一个表  12.1.1 创建映射文件  12.1.2 操纵持久化对象  12.2 继承关系树的根类对应一个表  12.2.1 创建映射文件  12.2.2 操纵持久化对象  12.3 继承关系树的每个类对应一个...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    hibernate学习笔记

    Hibernate的继承关系 21 每棵继承树映射成一张表(hibernate_extends_1) 22 每个子类映射成一张表(hibernate_extends_2) 24 每个具体类映射成一张表(hibernate_extends_3) 25 组件component映射(hibernate_...

Global site tag (gtag.js) - Google Analytics