您的位置:首页 > 其它

Hibernate学习笔记:混合使用每个继承结构一张表 和 每个子类一张表

2009-08-31 10:41 537 查看
先分析一下为什么要混合使用. 假如有这样一个情况: tiger有很多专属字段:tiger(animal_id,kind, weigth, body_len, tail_len, body_high),而monkey专属的字段就一个monkey(animal_id, age),如果只采用每个子类一张表, 则对于monkey来说,效率太低,因为为了一个字段却要跨表; 如果只采用一个继承结构一张表, 则对非TIGER的动物来说太浪费空间.所以, 综合来看, 把monkey的age放到父类表animal表中,对Monkey采用每个继承结构一张表; 把tiger的专有字段放在单独一张表中,采用每个子类一张表的映射策略.
基于这样的考虑,我们来做demo,当然我们不必搞那么多字段. 表关系:
animal(id, name, zoo_id, age, animal_type);
tiger(animal_id, kind);
Animal.hbm.xml
<!-- 混合使用每个继承结构一张表和每个子类一张表 -->
<hibernate-mapping package="model">
<class name="Animal" table="animal" schema="dbo" catalog="hibernate">
<id name="id" column="id">
<generator class="native" />
</id>
<discriminator column="animal_type" type="string" />
<property name="name" />
<many-to-one name="zoo" class="model.Zoo" column="zoo_id" />
<subclass name="model.Monkey" discriminator-value="MONKEY">
<property name="age" />
</subclass>
<subclass name="model.Tiger" discriminator-value="TIGER">
<join table="tiger">
<key column="animal_id" />
<property name="kind" />
</join>
</subclass>
</class>
</hibernate-mapping>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐