posts - 16,comments - 17,trackbacks - 0



          Hibernate的繼承映射包含了三種不同的策略:

          1. 每簇類使用一個表;
          2. 每個子類一個表;
          3. 每個具體內一個表(有限制)。
          假設我們有四個類Animal,Dog,Cat,其代碼如下:
          文件名:Animal.java
          class Animal {
              
          private String identifier;
              
          private String name;
              
          private String category;
              
          // setter and getter
          }

          文件名:Dog.java
          class Dog extends Animal {
              
          private String 
              
          // setter and getter
          }

          文件名:Cat.java
          class Cat extends Animal {
              
          private String 
              
          // setter and getter
          }

          • 每簇類使用一個表
                 使用每簇類使用一個表的策略時,有一個限制就時子類不能有NOT NULL,映射文件為:
                 文件名:Animal.hbm.xml
                 <class name="Animal" table="TB_ANIMAL">
                    
          <id name="identifier" type="string" column="IDENTIFIER">
                       
          <generator class="uuid.hex"/>
                    
          </id>
                    
          <discriminator column="ANIMAL_TYPE" type="string"/>
                    
          <property name="name" column="NAME" type="string"/>
                    
                    
          <subclass name="Dog" discriminator-value="DOG">
                       
                    
          </subclass>
                    
          <subclass name="Cat" discriminator-value="CAT">
                       
                    
          </subclass>
                 
          </class>

          • 每個子類一個表
                 使用每個子類一個表的策略時,可以使用一個映射文件實現,也可以分成多個映射文件來實現。每個子類一個映射文件的情況:
                 文件名:Animal.hbm.xml
                 <class name="Animal" table="ANIMAL">
                    
          <id name="identifier" column="IDENTIFIER" type="string">
                       
          <generator class="uuid.hex"/>
                    
          </id>
                    
          <property >
                 
          </class>
                 文件名:Dog.hbm.xml
                 
          <joined-subclass name="Dog" table="DOG" extends="Animal">
                    
          <key column="DOG_ID"/>
                    
                 
          </joined-subclass>
                 文件名:Cat.hbm.xml
                 
          <joined-subclass name="Cat" table="CAT" extends="Cat">
                    
          <key column="CAT_ID"/>
                    
                 
          </joined-subclass>

                 每個子類一個表的策略實際上一種one-to-one的映射。
          • 每個具體內一個表(有限制)
                 使用每個具體內一個表(有限制)策略時,每一個子類的映射文件將要包含所有父類中的屬性,映射文件:
                 文件名:Dog.hbm.xml
                 <class name="Dog" table="DOG">
                    
          <id name="identifier" column="IDENTIFIER" type="string">
                       
          <generator class="uuid.hex"/>
                    
          </id>
                    
          <property name="name" column="NAME" type="string"/>
                    
                 
          </class>
                 文件名:Cat.hbm.xml
                 
          <class name="Cat" table="CAT">
                    
          <id name="identifier" column="IDENTIFIER" type="string">
                       
          <generator class="uuid.hex"/>
                    
          </id>
                    
          <property name="name" column="NAME" type="string"/>
                    
                 
          </class>




          posted on 2005-03-02 22:31 非飛 閱讀(4618) 評論(1)  編輯  收藏 所屬分類: JAVA 相關技術

          FeedBack:
          # re: Hibernate中的繼承映射
          2008-04-26 11:15 | 無可奈何花落去
          錯別字也太多了點吧  回復  更多評論
            
          主站蜘蛛池模板: 习水县| 宣恩县| 固始县| 乐都县| 吴江市| 万山特区| 合山市| 凤翔县| 北安市| 双峰县| 时尚| 交口县| 阳原县| 车致| 海门市| 任丘市| 祥云县| 新津县| 苍山县| 克什克腾旗| 玉溪市| 诏安县| 隆尧县| 揭东县| 盘锦市| 绥江县| 望奎县| 隆子县| 仙游县| 曲松县| 柳林县| 湖北省| 邢台市| 海盐县| 新野县| 施甸县| 八宿县| 镇坪县| 平乡县| 元氏县| 通化市|