Dev@Free

zJun's Tech Weblog

[深入浅出Hibernate笔记] Hibernate中的继承关系

Hibernate中支持3种形式实现继承关系:
1. Table per concrete class 表与子类之间独立一对一关系
2. Table per subclass 每个子类对应一张子表,并与主类共享主表
3. Table per class hierarchy 表与类一对多关系

1. Table per concrete class
数据库:
父类没有对应的表,每个子类独立对应一张表,父类中的公共属性将在每一张表中以相同冗余字段的形式出现。
映射文件:子类对应的Hibernate的配映射文件与普通映射文件没有特别区别,只是通过<class>节点的 polymorphism="implicit" 属性实现隐式多态模式来实现与父类之间的继承关系。

2. Table per subclass
数据库:父类单独映射一张主表,而每个子类分别映射一张子表。子表和主表通过外键相关联。
映射文件:在映射文件中通过 <joined-subclass> 节点来表示主类和子类之间的继承关系,如下:

<hibernate-mapping>
  <class name="BaseClass" table="T_BASE">
    <id name="id" column="id">
      <generator class="native"/>
    </id>
    <property name="name" column="name"/>
    <!--申明子类1-->
    <joined-subclass name="SubClass1" table="T_SUB1">
      <key column="id"/>
      <property name="subName1" column="subName1"/>
    </joined-subclass>

    <!--申明子类2-->
    <joined-subclass name="SubClass2" table="T_SUB1">
      <key column="id"/>
      <property name="subName2" column="subName2"/>
    </joined-subclass>
  </class>
</hibernate-mapping>

3. Table per class hierarchy
数据库:用一张表对应所有子类,包含所有子类字段,通过一个标示类别的字段来区分不同子类对应的数据。
映射文件:通过<subclass> 和<disriminator>节点来对不同子类加以区别,如下:

<hibernate-mapping>
  <class name="BaseClass" table="T_BASE">
    <id name="id" column="id">
      <generator class="native"/>
    </id>
    <discriminator column="category" type="string"/>                <------------- 声明discriminator字段
    <property name="name" column="name"/>
    <!--子类1-->     
    <subclass name="SubClass1" discriminator-value="1">       <------------- discriminator为1,则是子类1
       <property name="subName1" column="subName1"/>
    </subclass>
  
    <!--子类2-->     
    <subclass name="SubClass2" discriminator-value="2">       <------------- discriminator为2,则是子类2
       <property name="subName2" column="subName2"/>
    </subclass>

  </class>
<hibernate-mapping>

posted on 2006-08-16 15:15 zJun's帛罗阁 阅读(1161) 评论(0)  编辑  收藏 所属分类: 数据库


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

统计

常用链接

留言簿(15)

随笔分类

随笔档案

相册

收藏夹

博客

文档

站点

论坛

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜