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 | 無可奈何花落去
          錯別字也太多了點吧  回復  更多評論
            
          主站蜘蛛池模板: 瓦房店市| 青浦区| 漳平市| 阿拉尔市| 满城县| 巴楚县| 隆昌县| 南和县| 鄢陵县| 安岳县| 马尔康县| 桃园市| 泰州市| 诸城市| 攀枝花市| 姚安县| 天峻县| 桐乡市| 商都县| 南皮县| 娱乐| 长武县| 东莞市| 眉山市| 安阳市| 鄂尔多斯市| 丰镇市| 白朗县| 马关县| 鄄城县| 托里县| 揭东县| 迁安市| 永胜县| 九龙城区| 福清市| 南昌市| 濮阳县| 民权县| 大英县| 安泽县|