继承映射

1、  整个继承层次一张表

a)         把继承层次的多个类的信息放到一张表里

b)        缺点:子类中属性的值必须是可以为空的

c)        映射文件:

<class name="Employee" table="Employee" discriminator-value="0">

       <id name="id">

           <generator class="native"/>

       </id>

       <discriminator column="type" type="int"/><!-- 定义鉴别器..要放在所有属性映射之前 -- > 

       <property name="name" column="name"/>

       <many-to-one name="depart" column="depart_id"/>

      

       <subclass name="Skiller" discriminator-value="1"><!—用subclass映射子类,指定鉴别字段值-->

           <property name="skill"/><!—映射本子类的属性-->

       </subclass>

      

       <subclass name="Sales" discriminator-value="2">

           <property name="sell"/>

       </subclass>

</class>

2、 每个子类一张表

a)      把对象模型上的继承关系表示为关系模型中的外键关联,继承结构中的每个类和子类都有一张对应的数据库表,

b)      这种映射在父类对应的数据库表中,实际上会存储所有的记录,包括父类和子类的记录,在子类对应的数据库表中,这个表只存储子类中所有特有的属性要映射的字段值,子类和父类,通过相同的主键来关联

<class name="Employee" table="employee">

    <id name="id">

           <generator class="native"/>

    </id>

    <property name="name" column="name"/>

    <many-to-one name="depart" column="depart_id"/>

    <joined-subclass name="Skiller" table="skiller"> 子类映射。相当于一个join连接 每个子类一张表。存放子类特有的信息

       <key column="employee_id"/>用key元素来指定子类和父类之间是通过那个字段来关联的

       <property name="skill"/>映射的本子类属性

    </joined-subclass>  

    <joined-subclass name="Sales" table="sales">

       <key column="employee_id"/>

       <property name="sell"/>

    </joined-subclass>

</class>

3、 每个具体类一张表:

a)      每个具体类对应一张表,而且这个比爱哦的信息是完备的,他包含所有从父类继承下来的属性映射的字段和自己的属性映射的字段,

<class name="Employee" table="employee">

       <id name="id">

           <generator class="hilo"/><!-- 高低位... 主键生成器 -->

       </id>

       <property name="name" column="name"/>

       <many-to-one name="depart" column="depart_id"/>

       <!—用union-subclass元素给 每个具体子类映射到一张表-->

       <union-subclass name="Skiller" table="skiller">

           <property name="skill"/>映射本子类属性

       </union-subclass>

       <union-subclass name="Sales" table="sales">

           <property name="sell"></property>

       </union-subclass>

    </class>

4、 继承映射方案的选择;

a)      如果不需要多态查询:使用每一张具体类一张表

b)      一定要使用多态查询:子类中的属性相对较少,使用每个继承层次一张表

c)      子类中属性较多:使用每个子类一张表

d)      简单的问题一般选择每个继承层次一张表,复杂的一半选择每个子类一张表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值