eric-1001c

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            3 隨筆 :: 45 文章 :: 12 評(píng)論 :: 0 Trackbacks
              1. 建立域模型和關(guān)系數(shù)據(jù)模型有著不同的出發(fā)點(diǎn):域模型是由程序代碼組成的,通過(guò)細(xì)化持久化類(lèi)的粒度來(lái)提高代碼可重用性,簡(jiǎn)化編程;而關(guān)系數(shù)據(jù)模型是由關(guān)系數(shù)據(jù)組成的,在存在數(shù)據(jù)冗余的情況下,可以把粗粒度的表拆分成具有外鍵參照關(guān)系的幾個(gè)細(xì)粒度表,此外在沒(méi)有數(shù)據(jù)冗余的情況下應(yīng)該盡可能減少表的數(shù)目,簡(jiǎn)化表之間的參照關(guān)系。
              域模型中的聚集aggregation對(duì)象關(guān)系在關(guān)系數(shù)據(jù)模型中可以通過(guò)映射為組成關(guān)系來(lái)提高代碼和數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)質(zhì)量。比如說(shuō)一個(gè)customer具有homeAddress和comAddress屬性,從域模型出發(fā),應(yīng)該把homeAddress和comAddress抽取出來(lái)成為一個(gè)過(guò)程對(duì)象。而在關(guān)系數(shù)據(jù)模型中可以通過(guò)hibernate提供的組成關(guān)系進(jìn)行映射。映射文件如下:
          1<component name="homeAddress" class="com.homeAddress">
          2  <parent name="customer"/>
          3  <property name="street" type="String" column="HOME_STREET"/>
          4  <property name="city" type="String" column="HOME_CITY"/>
          5   
          6</component>
          這樣進(jìn)行映射后,并不需要為homeAddress和comAddress單獨(dú)設(shè)置數(shù)據(jù)庫(kù)表,應(yīng)該把homeAddress和comAddress的屬性都和customer表放在一起
          而有一點(diǎn)要格外注意的是,域模型的組成對(duì)象homeAddress和comAddress對(duì)象除了具有一般的屬性成員變量外,需要為hibernate提供一個(gè)parent屬性,如下所示
           1packge com;
           2
           3import java.io.Serializabel;
           4
           5public class HomeAddress implements Serializable{
           6   private String street;
           7   private String city;
           8   
           9   private com.Customer customer;
          10   
          11   public void setCustomer(Customer customer){}
          12      public Customer getCustomer(){}

          hibernate提供的這種組成關(guān)系映射允許嵌套使用
          1<component>
          2  <compoent>
          3   
          4  </componet>
          5   
          6</component>

              2. 區(qū)分值value類(lèi)型和實(shí)體Entity類(lèi)型
                  Hibernate把持久化類(lèi)的屬性分為value和Entity類(lèi)型。前者沒(méi)有OID,不能被單獨(dú)持久化,不能單獨(dú)通過(guò)session加載,它的生命周期依賴(lài)于所屬的持久化類(lèi)的對(duì)象生命周期,組件類(lèi)型就是一種類(lèi)型;而后者有OID,可以被單獨(dú)持久化。在通過(guò)Configuration類(lèi)的addClass()方法加載映射文件時(shí),只需要加載與value類(lèi)型對(duì)應(yīng)的實(shí)體類(lèi)型,而不需要單獨(dú)加載組件類(lèi)。當(dāng)通過(guò)hibernate進(jìn)行數(shù)據(jù)庫(kù)操作的時(shí)候,hibernate會(huì)自動(dòng)把組件類(lèi)的屬性轉(zhuǎn)換為實(shí)體類(lèi)的屬性,從而和table的列對(duì)應(yīng)起來(lái)
          posted on 2008-01-23 20:47 Eric-1001c 閱讀(227) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Hibernate
          主站蜘蛛池模板: 和田县| 富宁县| 当涂县| 榆树市| 金堂县| 客服| 安顺市| 广宗县| 霸州市| 玉屏| 雅江县| 红原县| 霍山县| 介休市| 河北省| 桃源县| 肇州县| 宽城| 新营市| 梁山县| 湟中县| 资中县| 库车县| 瑞金市| 来凤县| 互助| 河北省| 灵璧县| 南平市| 独山县| 察雅县| 应用必备| 大名县| 嘉兴市| 宿州市| 通州区| 班戈县| 汨罗市| 连城县| 左云县| 伊通|