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)

          隨筆分類

          隨筆檔案

          相冊

          收藏夾

          博客

          文檔

          站點

          論壇

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 盖州市| 澳门| 永和县| 松滋市| 西藏| 沁阳市| 白水县| 红桥区| 邵阳县| 山丹县| 马边| 霍州市| 务川| 大冶市| 金乡县| 东台市| 法库县| 于田县| 大悟县| 花莲县| 隆安县| 寿阳县| 盐池县| 赤壁市| 威信县| 抚松县| 海南省| 静乐县| 宜丰县| 扶沟县| 大姚县| 玉田县| 河西区| 宁城县| 东光县| 卢龙县| 平安县| 南部县| 若尔盖县| 常德市| 齐河县|