打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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


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


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


1、 一棵继承树一张表。

直接上图,如下图所示。



  1. <hibernate-mapping package="com.bjpowernode.hibernate">    
  2.    <class name="Animal"  table="t_animal"  lazy="false">    
  3.       <id name="id">     
  4.          <generator class="native"/>    
  5.       </id>    
  6.          
  7.       <discriminator column="type" type="string">    
  8.       </discriminator>    
  9.          
  10.          
  11.       <property name="name"/>    
  12.       <property name="sex"/>    
  13.          
  14.       <subclass name="Pig" discriminator-value="P">    
  15.          <property name="weight"/>    
  16.       </subclass>    
  17.          
  18.       <subclass name="Bird" discriminator-value="B">    
  19.          <property name="height"/>    
  20.       </subclass>    
  21.    </class>    
  22. </hibernate-mapping>    

2、每个子类一张表。




  1. <!--加上package,所以不用写完整了.-->    
  2. <hibernate-mapping package="com.bjpowernode.hibernate">    
  3.    <class name="Animal"  table="t_animal"  abstract="true">    
  4.       <id name="id">     
  5.          <generator class="assigned"/>    
  6.       </id>    
  7.                    
  8.       <property name="name"/>    
  9.       <property name="sex"/>    
  10.          
  11.       <union-subclass name="Pig" table="t_pig">    
  12.          <property name="weight"/>    
  13.       </union-subclass>    
  14.          
  15.       <union-subclass name="Bird" table="t_bird">    
  16.          <property name="height"/>    
  17.       </union-subclass>    
  18.    </class>    
  19. </hibernate-mapping>   

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



  1. <hibernate-mapping package="com.bjpowernode.hibernate">    
  2.     
  3.     <class name="Animal"  table="t_animal"  lazy="false">    
  4.         <id name="id">        
  5.             <generator class="native"/>    
  6.         </id>    
  7.                     
  8.         <property name="name"/>    
  9.         <property name="sex"/>    
  10.             
  11.         <joined-subclass name="Pig" table="t_pig">    
  12.             <!-- 将会在pig表中加上一个pid -->    
  13.             <key column="pid"/>    
  14.             <property name="weight"/>    
  15.         </joined-subclass>    
  16.                             
  17.         <joined-subclass name="Bird" table="t_bird">    
  18.             <!-- 将会在pig表中加上一个pid -->    
  19.             <key column="bid"/>    
  20.             <property name="height"/>    
  21.         </joined-subclass>    
  22.     </class>    
  23. </hibernate-mapping>    

对比:


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

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

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


总结:


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



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
解读Hibernate继承映射策略
Hibernate4继承映射
hibernate的继承类的映射
传智播客-jpa与hibernate(3)-继承映射
Hibernate实体层次设计(一)
hibernate中inverse的用法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服