<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    O/R MAPPING (hibernate)方法小結

    Posted on 2006-10-12 10:20 my 閱讀(168) 評論(0)  編輯  收藏 所屬分類: java Web

    (一)對象之間的關系:
    1.依賴:
      依賴對象通過調用被依賴對象的方法來獲得服務。一種比較松散的關系,并且是短期的。我們的過程與對象往往依賴于我們的實體域對象。如在struts 的 action中調用模型層的方法。
    2.關聯
      它使一個類指到另一個類的屬性。長期的
    3.聚合
      聚合關系是關聯關系的一種,是強的關聯關系。聚合是整體和部分之間的關系。
    4.組合
      也叫合成關系,組成關系是關聯關系的一種,是比聚合關系強的關系。對象負責代表部分的對象的生命周期。

      注:既然聚合,組合關系屬于關聯關系,那么如何區分一般關聯關系,聚合關系和組合關系呢?

      一般關聯:只要一個對象聯系到另外一個對象就形成了關聯關系。如:人和他的貓,黑豹樂隊和竇魏,pc機和顯示器。
      聚合關系:一種強關聯關系,它要求有部分和整體的關系,并且沒有了整體部分也可以獨立存在。在上面三個例子中人和它的貓顯然沒有部分和整體的關系,所以只能是一般的關聯關系。而黑豹樂隊和竇魏,竇魏等人組成了黑豹樂隊即:竇魏和黑豹是整體和部分的關系。而竇魏脫離了黑豹(早就離開了)更或者黑豹不存在了那么竇魏仍然可以以音樂人的身份存在(即對象仍然可以獨立存在)所以它屬于聚合關系。組成關系是可以共享的。(竇魏也可以加入其他樂隊)。
      組合關系:一種更強的整體和部分的關系。它并且要求代表整體的對象負責代表部分的對象的生命周期,組成關系是不能共享的。如:pc機和顯示器的關系。

      我覺得:如果兩個實體是整體和部分的關系,那么它們到底是聚合還是組合,這取決于你的需求。比如說:pc機和顯示器的關系,如果你的系統中,顯示器脫離了pc機就不存在意義了,也可以說:所有顯示器的訪問都是通過pc機進行的,那么你可以把關系設定為組合(如你在為一個只買品牌機的代理商作系統你可能是可以這么作的)。如果你的顯示器脫離的pc機仍然可以獨立存在,也就是說在系統中可以直接訪問顯示器對象,那么你可以將關系設為聚合(如你在為一個買散件的代理商作系統你可能是可以這么作的)
    5.繼承
      這個我不想多講了,用過面向對象的語言都應該知道。

    (二)關系數據庫的關系
      一對一
      一對多
      多對一
      多對多
    (三)o/r mapping策略
      1.繼承:
      對于繼承關系一般有三種策略:
      策略1繼承樹的每個類對應一個表<joined-subclass >
       共享主鍵
      策略2繼承樹的根類對應一個表<discriminator ><subclass >
       需要添加一個識別字段
      策略3繼承樹的葉子類對應一個表
       不支持多態查詢
      2.關聯
      2.1 一對一
      一半有兩種策略:
      策略1:唯一的外鍵
       <many-to-one>+unique="true" (唯一的外鍵)
       <one-to-one>
      策略2:共享主鍵
       <one-to-one>
       <one-to-one><constrained="true"> (既是主鍵又是外鍵)
       注意:生成方式需要用:foreign
      2.2 一對多(無需多說)
      2.3 多對一(無需多說)
      2.4 多對多
      策略1:A,B表多對多的關系需要引入C表。
       C表中的所有屬性即為主鍵又為外鍵分別參照A,B兩表。
       C表中不可以有其他屬性
      策略2:將多對多拆分成兩個一對多:
       A,B對象多對多的關系需要引入C對象。使得A,B兩對象與C對象的關系為一對多。對應數據庫中:A,B表多對多的關系需要引入C表。A,B兩表與C表的關系為一對多。
       C表又自己的主鍵
       C表中又非主鍵的外鍵分別參照A,B兩表。
       C表中不可以有其他屬性
       如;學生 ,課程為多對多的關系 那么引入學生選課。
      注意:策略1和策略2的不同在于:策略2引入了新的對象而策略1沒有。這是因為這樣:策略1的c表不能又自己的東西。而策略2有。
      2.5 其他
      上面說過:聚合與組成是關聯的一種所以他們也符合以上策略。
      特別的:當用到組合關系的是否我們可用用到hibernate的"組件"<component>.由于"組件"它完全可以滿足組成關系的強關聯。
      3.依賴
      一般不在實體域對象中體現。

      O/R MAPPING (HIBERNATE)方法小結 (補充內容):
      另外我看到了一種"鍵關聯"的方法,感覺很有道理。我理解了一下總結如下:
      1.一般關聯:
      這種方法對于一般的關聯總是引入c表(另外的一張表)僅僅表示關系。
      C表的主鍵有分別指向A,B兩表(外鍵)。當指向一方的外鍵unique="true"即唯一,那么這一方為"一",反之為"多"的一方。這樣就可以形成一般的關聯關系。但是注意的是:c表不映射為對象。C表也沒有自己的屬性。
      2.聚合和組成
      當實體A的非主鍵列中有一個引自實體B的時候,這種關系是B聚合A。如果這種引用是強制性的,則是合成關系,否則為聚合關系。是否為強制性,只需要將引用列設為非空即可;
      3.繼承
      當實體A的主鍵引用自實體B的時候(即為外鍵),那么A繼承 B。

    posts - 63, comments - 45, trackbacks - 0, articles - 99

    Copyright © my

    主站蜘蛛池模板: 91高清免费国产自产| 久久久精品国产亚洲成人满18免费网站 | 亚洲av鲁丝一区二区三区| 精品国产免费人成网站| 久久久久亚洲精品中文字幕| 羞羞视频免费网站入口| 免费一级毛片在线观看| 羞羞漫画登录页面免费| 久久亚洲2019中文字幕| 中文在线观看免费网站| 亚洲成av人片天堂网| 免费看男人j放进女人j免费看| 亚洲免费在线视频| 亚洲片国产一区一级在线观看| 乱爱性全过程免费视频| 亚洲午夜无码久久久久| 香港a毛片免费观看 | 国产AV日韩A∨亚洲AV电影| 亚洲国产日韩成人综合天堂| ssswww日本免费网站片| 亚洲αv在线精品糸列| 亚洲色大成网站www永久网站| 日韩免费观看的一级毛片| 精品在线视频免费| 亚洲国产精品嫩草影院在线观看| 日韩精品极品视频在线观看免费 | 成人午夜大片免费7777| 美女黄色毛片免费看| 国产亚洲日韩在线三区| 最近中文字幕免费mv在线视频| 亚洲一线产区二线产区区| 亚洲JIZZJIZZ中国少妇中文| 日韩免费视频一区二区| 色老板亚洲视频免在线观| 亚洲国产婷婷综合在线精品| 日韩精品无码专区免费播放| 亚洲国产AV无码一区二区三区 | 亚洲AV第一页国产精品| 成年人免费观看视频网站| 一个人看的免费观看日本视频www| 亚洲AV人无码综合在线观看 |