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类来完全封装数据库,使数据库完全对象化,而我们在写程序操作数据库时也完全像操作一个对象一样,这样数据库表的继承关系也表现的非常自然了。

猜你喜欢

转载自ryan200909.iteye.com/blog/1533522
今日推荐