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帛羅閣 閱讀(1172) 評論(0)  編輯  收藏 所屬分類: 數據庫

          導航

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

          統計

          常用鏈接

          留言簿(15)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          博客

          文檔

          站點

          論壇

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 西华县| 临洮县| 长子县| 西畴县| 商洛市| 永丰县| 揭东县| 青海省| 东乡族自治县| 邵东县| 孝昌县| 太康县| 上杭县| 黄浦区| 本溪| 沾益县| 安阳县| 博客| 滦南县| 合江县| 宁武县| 栖霞市| 斗六市| 泰州市| 柳林县| 浮梁县| 丹棱县| 新晃| 武川县| 寻乌县| 甘肃省| 当雄县| 阿拉尔市| 开化县| 瑞昌市| 怀宁县| 平遥县| 萝北县| 安泽县| 班玛县| 新建县|