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

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


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 西充县| 长白| 安义县| 商洛市| 巴青县| 临邑县| 邢台县| 栾川县| 调兵山市| 修文县| 农安县| 贵州省| 措勤县| 湾仔区| 陈巴尔虎旗| 界首市| 信阳市| 永德县| 宝坻区| 德令哈市| 宁夏| 乡城县| 内乡县| 邳州市| 台东县| 甘孜| 湘潭县| 五寨县| 乐亭县| 神农架林区| 丹江口市| 沙河市| 铜梁县| 福鼎市| 铜川市| 仙居县| 揭东县| 和政县| 凤山市| 新绛县| 潜山县|