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)提高代碼可重用性,簡(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ù)訪問(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類型和實(shí)體Entity類型
                  Hibernate把持久化類的屬性分為value和Entity類型。前者沒(méi)有OID,不能被單獨(dú)持久化,不能單獨(dú)通過(guò)session加載,它的生命周期依賴于所屬的持久化類的對(duì)象生命周期,組件類型就是一種類型;而后者有OID,可以被單獨(dú)持久化。在通過(guò)Configuration類的addClass()方法加載映射文件時(shí),只需要加載與value類型對(duì)應(yīng)的實(shí)體類型,而不需要單獨(dú)加載組件類。當(dāng)通過(guò)hibernate進(jìn)行數(shù)據(jù)庫(kù)操作的時(shí)候,hibernate會(huì)自動(dòng)把組件類的屬性轉(zhuǎn)換為實(shí)體類的屬性,從而和table的列對(duì)應(yīng)起來(lái)
          posted on 2008-01-23 20:47 Eric-1001c 閱讀(228) 評(píng)論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 濮阳市| 洞头县| 侯马市| 原平市| 临邑县| 离岛区| 维西| 青铜峡市| 宜君县| 昆明市| 乳山市| 天长市| 阿拉尔市| 镇安县| 高青县| 竹北市| 郑州市| 蒙自县| 安义县| 施秉县| 武川县| 泰宁县| 上思县| 拉孜县| 北辰区| 阿鲁科尔沁旗| 光泽县| 儋州市| 丹江口市| 武清区| 洞头县| 齐齐哈尔市| 永寿县| 太保市| 教育| 格尔木市| 堆龙德庆县| 丰台区| 清新县| 长丰县| 高陵县|