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
基于这样的考虑,我们来做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>
相关文章推荐
- Hibernate学习笔记:继承映射之每个子类一张表,使用辨别标志
- Hibernate学习笔记:继承映射之每个子类一张表
- Hibernate学习笔记:继承映射之每个类继承结构一张表
- 使用JPA的@SecondaryTable来实现hibernate的混合使用“每个类分层结构一张表”和“每个子类一张表”的功能
- Hibernate继承映射:每个子类一张表(joined-subclass)表结构
- Hibernate继承映射:每个子类一张表(joined-subclass)表结构
- 继承结构中每个子类单独一张表
- Hibernate实战_笔记29(每个类层次结构一张表)
- hibernate继承映射之每个子类一张表(无辨识)
- Hibernate学习笔记:每个具体的类一张表
- hibernate继承结构中每个类一张表
- Hibernate继承映射方式之每个子类一张表
- hibernate继承关系映射关系方法(二)--每个子类一张表
- Hibernate映射类继承之每个带有隐式多态的具体类一张表(每个子类各一张表,有各自的映射文件)
- hibernate继承映射之每个分层结构一张表
- hibernate继承映射策略之每个子类一张表
- Hibernate映射类继承之每个带有联合的具体类一张表(每个子类各一张表,共用一个父类映射文件)
- Hibernate学习18 -- 关联映射8 -- 继承映射2 -- 父类存储在一张表,子类分别存储一张表
- Hibernate_映射_继承结构映射1_使用一张表的方式
- Hibernate学习19 -- 关联映射9 -- 继承映射3 -- 子类分别存储一张表