读书人

Hibernate中数据库表的承继关系

发布时间: 2012-07-05 07:59:17 作者: rapoo

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 /></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文件体现了Person和User的继承关系,如果你还是不太清楚地话,看下面的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类来完全封装数据库,使数据库完全对象化,而我们在写程序操作数据库时也完全像操作一个对象一样,这样数据库表的继承关系也表现的非常自然了。

读书人网 >其他数据库

热点推荐