java學習

          java學習

           

          hibernate中每棵繼承樹映射成一張表

          public class Animal {
           
           private int id;
           
           private String name;
           
           private boolean sex;

           public int getId() {
            return id;
           }

           public void setId(int id) {
            this.id = id;
           }

           public String getName() {
            return name;
           }

           public void setName(String name) {
            this.name = name;
           }

           public boolean isSex() {
            return sex;
           }

           public void setSex(boolean sex) {
            this.sex = sex;
           }
          }

          public class Bird extends Animal {

           private int height;

           public int getHeight() {
            return height;
           }

           public void setHeight(int height) {
            this.height = height;
           }
          }

          public class Pig extends Animal {
           
           private int weight;

           public int getWeight() {
            return weight;
           }

           public void setWeight(int weight) {
            this.weight = weight;
           }
          }

          在extends.hbm.xml文件:
          <hibernate-mapping package="com.hibernate">
           <class name="Animal" table="t_animal" lazy="false">
            <id name="id">
             <generator class="native"/>
            </id>
            <discriminator column="type" type="string"/>
            <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>
          理解如何映射
            因為類繼承樹肯定是對應(yīng)多個類,要把多個類的信息存放在一張表中,必須有某種機制來區(qū)分哪些記錄是屬于哪個類的。
           這種機制就是,在表中添加一個字段,用這個字段的值來進行區(qū)分。用hibernate實現(xiàn)這種策略的時候,有如下步驟:
           父類用普通的<class>標簽定義
           在父類中定義一個discriminator,即指定這個區(qū)分的字段的名稱和類型
           如:<discriminator column=”XXX” type=”string”/>
           子類使用<subclass>標簽定義,在定義subclass的時候,需要注意如下幾點:
           Subclass標簽的name屬性是子類的全路徑名
           在Subclass標簽中,用discriminator-value屬性來標明本子類的discriminator字段(用來區(qū)分不同類的字段)
           的值Subclass標簽,既可以被class標簽所包含(這種包含關(guān)系正是表明了類之間的繼承關(guān)系),也可以與class標
           簽平行。 當subclass標簽的定義與class標簽平行的時候,需要在subclass標簽中,添加extends屬性,里面的值
           是父類的全路徑名稱。子類的其它屬性,像普通類一樣,定義在subclass標簽的內(nèi)部。

          posted on 2013-05-06 22:51 楊軍威 閱讀(219) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          導航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鄂州市| 高陵县| 读书| 鄯善县| 昭苏县| 日照市| 饶阳县| 金乡县| 泽库县| 横峰县| 邵阳市| 冕宁县| 陇南市| 博乐市| 邻水| 色达县| 郧西县| 恩施市| 昆山市| 盘山县| 伊吾县| 安顺市| 西丰县| 筠连县| 淮南市| 武山县| 安化县| 米泉市| 从化市| 侯马市| 临清市| 彭阳县| 绍兴市| 永吉县| 富平县| 定边县| 贵南县| 积石山| 台湾省| 吐鲁番市| 文水县|