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 非飛 閱讀(4609) 評論(1)  編輯  收藏 所屬分類: JAVA 相關技術

          FeedBack:
          # re: Hibernate中的繼承映射
          2008-04-26 11:15 | 無可奈何花落去
          錯別字也太多了點吧  回復  更多評論
            
          主站蜘蛛池模板: 博罗县| 宝山区| 广东省| 德昌县| 上饶县| 宁蒗| 确山县| 青铜峡市| 龙游县| 淮南市| 莒南县| 随州市| 酒泉市| 搜索| 尼勒克县| 聂拉木县| 金塔县| 乌恰县| 察隅县| 浏阳市| 乡城县| 罗平县| 德安县| 邢台县| 天等县| 寿宁县| 融水| 张家界市| 阜宁县| 贡觉县| 南宫市| 奉新县| 略阳县| 武乡县| 沿河| 正定县| 泗洪县| 沭阳县| 中山市| 仁寿县| 昂仁县|