【SSH 基础】Hibernate继承关系映射

22 篇文章 0 订阅


继承关系大家应该都很清楚,那么对于Hibernate对于继承来说是如何映射的呢?下面就介绍一下Hibernate继承类映射到表的三种方式:


1、一棵继承树映射一张表。
2、每个子类各自映射表。
3、继承树的每个类各自映射表。


1、 一棵继承树一张表。

直接上图,如下图所示。



<hibernate-mapping package="com.bjpowernode.hibernate">  
   <class name="Animal"  table="t_animal"  lazy="false">  
      <id name="id">   
         <generator class="native"/>  
      </id>  
       
      <discriminator column="type" type="string">  
      </discriminator>  
       
       
      <property name="name"/>  
      <property name="sex"/>  
       
      <subclass name="Pig" discriminator-value="P">  
         <property name="weight"/>  
      </subclass>  
       
      <subclass name="Bird" discriminator-value="B">  
         <property name="height"/>  
      </subclass>  
   </class>  
</hibernate-mapping>  

2、每个子类一张表。




<!--加上package,所以不用写完整了.-->  
<hibernate-mapping package="com.bjpowernode.hibernate">  
   <class name="Animal"  table="t_animal"  abstract="true">  
      <id name="id">   
         <generator class="assigned"/>  
      </id>  
                 
      <property name="name"/>  
      <property name="sex"/>  
       
      <union-subclass name="Pig" table="t_pig">  
         <property name="weight"/>  
      </union-subclass>  
       
      <union-subclass name="Bird" table="t_bird">  
         <property name="height"/>  
      </union-subclass>  
   </class>  
</hibernate-mapping> 

3、每个类一张表(子类+父类)



<hibernate-mapping package="com.bjpowernode.hibernate">  
  
    <class name="Animal"  table="t_animal"  lazy="false">  
        <id name="id">      
            <generator class="native"/>  
        </id>  
                  
        <property name="name"/>  
        <property name="sex"/>  
          
        <joined-subclass name="Pig" table="t_pig">  
            <!-- 将会在pig表中加上一个pid -->  
            <key column="pid"/>  
            <property name="weight"/>  
        </joined-subclass>  
                          
        <joined-subclass name="Bird" table="t_bird">  
            <!-- 将会在pig表中加上一个pid -->  
            <key column="bid"/>  
            <property name="height"/>  
        </joined-subclass>  
    </class>  
</hibernate-mapping>  

对比:


以上三种策略,各有优缺点:

单表继承。查询速度最快,效率高,但是存在冗余字段。
类表继承。层次清楚,无冗余;但是如果使用自增主键方式会产生重复主键。需要使用手动分配主键。

具体表继承。层次最明了,这是优点,也是缺点,而且数据操作效率不高!


总结:


上面介绍的Hibernate继承映射的3种方式,这三种方式各有优缺点,大家在使用时,可以有针对性的选择,这些映射都是Hibernate的基础知识,具体的应用还需要我们在实战中体会!



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值