日期:2014-05-16  浏览次数:20532 次

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;