java技術

          hibernate spring struts

          BlogJava 聯系 聚合 管理
            18 Posts :: 0 Stories :: 1 Comments :: 0 Trackbacks
          可能經常遇到這樣的情況:
                 
          在數據庫表中會有這樣的一個字段用來區別記錄的屬性,如:在客戶表中有一個字段表示客戶級別,當這個記錄為A時是一級客戶,為B時是二級客戶。在用hiberanteOR表示時類可能是這樣的:
                 public class Customer{
                    private String flag;   //
          表示客戶的級別
                    ...
                 }    
                 
          然后,在程序中手動控制flag的值,但是這樣當每個級的客戶有不同的屬性時Customer類將包含所有級別的屬性,這樣不是很好。
                 hibernate
          提供一個Discriminator映射的方法,就是把一個表映射成不同的類,有不同的屬性。

                 public class Customer{
                    //
          包含所有級別的公共屬性
                    ...
                  }
                 
                 public class CustomerA extends Customer{
                 //
          只包括一級客戶的特有屬性
                  }

                 public class CustomerB extends Customer{
                 //
          只包含二級客戶特有的屬性
                  }
          這樣更符合面向對象的原則,然后在hbm.xml中這樣寫:
          <id name="id" type="int">
              ...
          </id>
          <discriminator column="flag" type="string" />
          <!-- 
          公共屬性的映射 -->
          <subclass name="CustomerA" discriminator-value="A">
          <!-- 
          一級客戶特有屬性的映射
           -->
          </subclass>
          <subclass name="CustomerB" discriminator-value="B">
          <!-- 
          二級客戶特有屬性的映射
           -->
          </subclass>

          這樣就可以單獨的用CustomerA,CustomerB這樣的實例了,做數據庫修改時就不用關心flag字段的值了,會自動的加AB


          如果是使用hibernate Annotation而不是xml來描述映謝關系,代碼如下:
          @Entity
          @Table(name = "customer")
          @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
          @DiscriminatorColumn(name = "flag", discriminatorType = DiscriminatorType.STRING)
          public class Customer{
          }

          @Entity
          @DiscriminatorValue(value = "A")
          public class CustomerA extends Customer{
          }

          @Entity
          @DiscriminatorValue(value = "B")
          public class CustomerB extends Customer{
          }

          這樣就可以了。
          posted on 2009-12-23 12:26 just 閱讀(272) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 承德县| 连平县| 高密市| 灌云县| 镇江市| 巩留县| 镇安县| 巫溪县| 大冶市| 镇巴县| 桐城市| 北流市| 元朗区| 宁德市| 定远县| 双鸭山市| 耒阳市| 晋宁县| 临夏县| 博湖县| 丰城市| 新津县| 珠海市| 长岛县| 从化市| 甘泉县| 威远县| 砀山县| 繁峙县| 泽州县| 额尔古纳市| 南木林县| 桑日县| 灵璧县| 安塞县| 阜南县| 龙州县| 富民县| 务川| 邳州市| 广水市|