首先:数据表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)
)
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;
}
}
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;
}
}
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;
}
}
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 >
<! 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为子类类名。