继承映射
3种方式,继承关系映射到数据库的表中
1.继承关系层次一个表(Table per class hierarchy),这种方式使用一个表存储同一个继
承层次的所有类,使用额外的字段来表示所记录的是哪一个子类的数据。
2.每一个具体类一个表(Table per concrete class),这种方式让继承关系中的每个具体类
对应一个表
3.每个子类一个表(Table per subclass),这种方式让继承关系中的父类和每一个子类分别
对应一个表,父类与子类对应的表通过外键产生关联

继承关系层次一个表

public class Delivery implements java.io.Serializable{
private Integer id;
private String recipient;
private String phone;
private String address;
private String postcode;
}
public class PostDelivery extends Delivery{
private String parcelNumber;
}
public class ExpressDelivery extends Delivery{
private String expressCompany;
private String expressNumber;
}
并且生成getter和setter方法
在delivery.hbm.xml修改
在id 下面加入
<!--以delivery_type区分-->
<discriminator column="delivery_type"></discriminator>
<!--子类PostDelivery特有的属性-->
<subclass name="com.rbh.examples.PostDelivery" discriminator-value="Post">
<property name="paracelNumber" type="java.lang.String">
<column name="PARACEL_NUMBER" length="30" />
</property>
</subclass>
<!--子类ExpressDelivery特有的属性-->
<subclass name="com.rbh.examples.ExpressDelivery" discriminator-
value="Express">
<property name="expressNumber" type="java.lang.String">
<column name="EXPRESS_NUMBER" length="30" />
</property>
<property name="expressCompany" type="java.lang.String">
<column name="EXPRESS_COMPANY" length="30" />
</property>
</subclass>
每个具体类一个表

public abstract class Delivery implements java.io.Serializable
{
private Integer id;
private String recipient;
private String phone;
private String address;
private String postcode;
}
<class name="com.rbh.examples.Delivery" table="DELIVERY" schema="SCOTT"
abstract="true"> 为抽象类
<union-subclass name="com.rbh.examples.PostDelivery" table="post_delivery">
<property name="parcelNumber" type="java.lang.String">
<column name="PARCEL_NUMBER" length="30" />
</property>
</union-subclass>
<union-subclass name="com.rbh.examples.ExpressDelivery"
table="express_delivery">
<property name="expressNumber" type="java.lang.String">
<column name="EXPRESS_NUMBER" length="30" />
</property>
<property name="expressCompany" type="java.lang.String">
<column name="EXPRESS_COMPANY" length="30" />
</property>
</union-subclass>
每个子类一个表

public class Delivery implements java.io.Serializable{
private Integer id;
private String recipient;
private String phone;
private String address;
private String postcode;
}
public class PostDelivery extends Delivery{
private String parcelNumber;
}
public class ExpressDelivery extends Delivery{
private String expressCompany;
private String expressNumber;
}
<joined-subclass name="com.rbh.examples.PostDelivery" table="post_delivery">
<key column="id" foreign-key="id"></key>
<property name="parcelNumber" type="java.lang.String">
<column name="PARCEL_NUMBER" length="30" />
</property>
</joined-subclass>
<joined-subclass name="com.rbh.examples.ExpressDelivery"
table="express_delivery">
<key column="id" foreign-key="id"></key>
<property name="expressNumber" type="java.lang.String">
<column name="EXPRESS_NUMBER" length="30" />
</property>
<property name="expressCompany" type="java.lang.String">
<column name="EXPRESS_COMPANY" length="30" />
</property>
</joined-subclass>
本文介绍了三种将继承关系映射到数据库表的方法:继承关系层次一个表、每个具体类一个表及每个子类一个表,并提供了具体的代码示例。
2092

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



