hibernate joined-subclass基础(转)

zzju.net 站长居


考虑这样一个继承关系mammal与cat,dog。对应的类如下

public class Mammal {
private int id;
private String name;
}

public class Cat extends Mammal {
private String kind;
private int scratchLevel;
}

public class Dog extends Mammal {
private String variety;
private int biteLevel;
}

由于我们采用不同的table来存储相应的类数据,所以在设计上要选择较比巧妙的方法,即在cat与dog对应的table中采用主键映射的方法。我们将mammal对应的table中的id作为cat与dog的外键,并且在cat与dog对应的table中只存储以下的字段信息:

create table cat(
cat_id int primary key not null,
kind varchar(10) not null,
scratchlevel int not null
);

create table dog(
dog_id int primary key not null,
variety varchar(15) not null,
bitelevel int not null
);

发现了没?cat与dog从mammal中继承的name域在table中没有相应的字段来存储。由于采用了外键的映射,我们将id与name存入mammal的table中,这样可以节省存储空间,并且很容易进行查找。

那么,外键对应的hibernate描述符如何写呢?我们选用joined-subclass来实现。cat相应的描述如下

<joined-subclass name= "inheritedmapping2.Cat" table= "CAT" >
<key column= "CAT_ID" />
<property name= "kind" type= "string" column= "KIND" />
<property name= "scratchLevel" type= "int" column= "SCRATCHLEVEL" />
</joined-subclass>

该片断在Mammal.hbm.xml中。其实除了joined-subclass这个描述字符串以外,其他的都同一般的描述符的一样。通过key,我们将cat table的id与mammal table的id相联系,这样就实现了cat的两个table分开存储。dog中的映射片断与cat相似,改改table与property的值就好了。

查询时,同上一篇一样

List cats = session.find( "from Cat" );

将选出数据库中全部的cat对象, "from Mammal"将选出所有的对象。


思考:joined-subclass是基于外键连接实现继承关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值