首先:数据表user如下:
create database person;
use person
CREATE TABLE USER (
ID CHAR(32) NOT NULL,
DISCRIMINATOR_TYPE VARCHAR(255) NOT NULL,
NAME VARCHAR(16) NOT NULL,
PASSWORD VARCHAR(16) NOT NULL,
POWERUSER_LEVEL INTEGER,
POWER_OTHER VARCHAR(255),
GUEST_OTHER VARCHAR(255),
PRIMARY KEY(ID)
)其次:User类是PowerUser类、GuestUser类的父类,代码如下:
//User类代码
package com.cn.gz.factory;

public class User ...{
private String id;
private String name;
private String password;

public String getId() ...{
return id;
}

public void setId(String id) ...{
this.id = id;
}

public String getName() ...{
return name;
}

public void setName(String name) ...{
this.name = name;
}

public String getPassword() ...{
return password;
}

public void setPassword(String password) ...{
this.password = password;
}
}
//PowerUser类代码
package com.cn.gz.factory;

public class PowerUser extends User ...{
private int level;
private String otherOfPower;

public int getLevel() ...{
return level;
}

public void setLevel(int level) ...{
this.level = level;
}

public String getOtherOfPower() ...{
return otherOfPower;
}

public void setOtherOfPower(String otherOfPower) ...{
this.otherOfPower = otherOfPower;
}
}
//GuestUser类代码
package com.cn.gz.factory;

public class GuestUser extends User ...{
private String otherOfGuest;

public String getOtherOfGuest() ...{
return otherOfGuest;
}

public void setOtherOfGuest(String otherOfGuest) ...{
this.otherOfGuest = otherOfGuest;
}
}
再次:配置映射文件User.hbm.xml,如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.cn.gz.factory.User" table="user" catalog="person" discriminator-value="ParentUser">
<id name="id" type="string" unsaved-value="null">
<column name="ID" length="32" />
<generator class="uuid.hex" />
</id>
<discriminator column="DISCRIMINATOR_TYPE" type="string" />
<property name="name" type="string">
<column name="NAME" length="16" not-null="true" />
</property>
<property name="password" type="string">
<column name="PASSWORD" length="16" not-null="true" />
</property>
<subclass name="com.cn.gz.factory.PowerUser" discriminator-value="POWER">
<property name="level" type="integer" column="POWERUSER_LEVEL" />
<property name="otherOfPower" type="string" column="POWER_OTHER" />
</subclass>
<subclass name="com.cn.gz.factory.GuestUser" discriminator-value="GUEST">
<property name="otherOfGuest" type="string" column="GUEST_OTHER" />
</subclass>
</class>
</hibernate-mapping>
总结:一个表的继承映射是通过一个discriminator标识来识别的。父类与子类都要加上discriminator-value属性,用subclass标签指定子类,name为子类类名。
本文介绍了一种使用Hibernate进行单表继承映射的方法,详细展示了如何通过discriminator配置父类User与子类PowerUser及GuestUser的关系,并给出了具体的Java类与XML映射文件示例。
917

被折叠的 条评论
为什么被折叠?



