对于对象的继承关系, 建议“每一棵类继承树对应一个表”,即对每一个子类都进行使用<subclass>声明。 例如:
有一个基类: class User, 两个子类: class Admin和 class Guest.
则新建一个表格来对应这个继承类数:
create table USER (
ID char(32) not null,
DISCRIMINATOR_USERTYPE varchar(255) not null,
NAME varchar(16) not null,
PASSWORD varchar(16) not null,
USER_LEVEL integer,
POWER_OTHER varchar(255),
GUEST_OTHER varchar(255),
primary key (ID)
);
其中字段DISCRIMINATOR_USERTYPE来记录储存的类别是属于User、Admin或是Guest的记录,如果该字段是ParentUser,则表示该笔数据是User类别,如果是ADMIN,表示是Admin的记录,如果是GUEST,表示是Guest的记录.
映像文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<class name="com.zj.User" table="USER" discriminator-value="ParentUser">
<id name="id" type="string" unsaved-value="null">
<column name="ID" sql-type="char(32)"/>
<generator class="uuid.hex"/>
</id>
<discriminator column="DISCRIMINATOR_USERTYPE" type="string"/>
<property name="name" type="string" not-null="true">
<column name="NAME" length="16" not-null="true"/>
</property>
<property name="password" type="string" not-null="true">
<column name="PASSWORD" length="16" not-null="true"/>
</property>
<subclass name="com.zj.Admin" discriminator-value="ADMIN">
<property name="level" type="integer" column="ADMIN_LEVEL"/>
<property name="otherOfPower" type="string" column="POWER_OTHER"/>
</subclass>
<subclass name="com.zj.Guest" discriminator-value="GUEST">
<property name="otherOfGuest" type="string" column="GUEST_OTHER"/>
</subclass>
</class>
</hibernate-mapping> 注意上面文件中,在映像子类别时,使用<subclass>指明映像的子类别以及其discriminator-value来指定.
posted on 2005-09-11 00:21
ZhuJun 阅读(376)
评论(0) 编辑 收藏 所属分类:
开发手记 、
开源项目