首先,在数据库中建立表:
CREATE TABLE `container` (
`containerId` varchar(50) NOT NULL,
`container_type` varchar(50) NOT NULL,
`size` double default NULL,
`name` varchar(50) default NULL,
`description` varchar(50) default NULL,
`height` double default NULL,
`length` double default NULL,
`width` double default NULL,
`diameter` double default NULL,
PRIMARY KEY (`containerId`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
其中Container是一个抽象类,其下有两个子类Box和Bottle
public abstract class Container {
private String containerId;
private double size;
private String name;
private String description;
public String getContainerId() {
return containerId;
}
public void setContainerId(String containerId) {
this .containerId = containerId;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this .description = description;
}
public String getName() {
return name;
}
public void setName(String name) {
this .name = name;
}
public double getSize() {
return size;
}
public void setSize( double size) {
this .size = size;
}
}
public class Bottle extends Container {
private double diameter;
private double height;
public double getDiameter() {
return diameter;
}
public void setDiameter( double diameter) {
this .diameter = diameter;
}
public double getHeight() {
return height;
}
public void setHeight( double height) {
this .height = height;
}
}
public class Box extends Container {
private double height;
private double length;
private double width;
public double getHeight() {
return height;
}
public void setHeight( double height) {
this .height = height;
}
public double getLength() {
return length;
}
public void setLength( double length) {
this .length = length;
}
public double getWidth() {
return width;
}
public void setWidth( double width) {
this .width = width;
}
}
在HBM文件中,定义,抽象类的配置
<! 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 - Hibernate Tools
-->
< hibernate-mapping package ="abstracttest" >
< class name ="Container" abstract ="true" table ="container" >
< id name ="containerId" >
< generator class ="uuid.hex" ></ generator >
</ id >
< discriminator column ="container_type" ></ discriminator >
< property name ="size" column ="size" ></ property >
< property name ="name" column ="name" ></ property >
< property name ="description" column ="description" ></ property >
< subclass name ="Box" discriminator-value ="BOX" >
< property name ="height" column ="height" ></ property >
< property name ="width" column ="width" ></ property >
< property name ="length" column ="length" ></ property >
</ subclass >
< subclass name ="Bottle" discriminator-value ="BOTTLE" >
< property name ="diameter" column ="diameter" ></ property >
< property name ="height" column ="height" ></ property >
</ subclass >
</ class >
</ hibernate-mapping >
最后是测试代码
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();
Session session = sf.openSession();
Transaction t = session.beginTransaction();
Box box1 = new Box();
box1.setName( " 木箱子 " );
box1.setHeight( 50 );
box1.setLength( 50 );
box1.setWidth( 50 );
box1.setDescription( " 包装电视机 " );
box1.setSize( 12500 );
Bottle bottle1 = new Bottle();
bottle1.setName( " 玻璃瓶子 " );
bottle1.setDescription( " 喝牛奶用 " );
bottle1.setSize( 139.12 );
bottle1.setDiameter( 6 );
bottle1.setHeight( 12 );
sessio