国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

O/R MAPPING(Hibernate)方法小結(jié)

2019-11-18 12:56:48
字體:
供稿:網(wǎng)友

  一.對象之間的關(guān)系:
  
  1.依靠:
  
  依靠對象通過調(diào)用被依靠對象的方法來獲得服務(wù)。一種比較松散的關(guān)系,并且是短期的。我們的過程與對象往往依靠于我們的實(shí)體域?qū)ο蟆H缭趕truts的action中調(diào)用模型層的方法。
  
  2.關(guān)聯(lián)
  
  它使一個(gè)類指到另一個(gè)類的屬性。長期的
  
  3.聚合
  
  聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強(qiáng)的關(guān)聯(lián)關(guān)系。聚合是整體和部分之間的關(guān)系。
  
  4.組合
  
  也叫合成關(guān)系,組成關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強(qiáng)的關(guān)系。對象負(fù)責(zé)代表部分的對象的生命周期。
  
  注:既然聚合,組合關(guān)系屬于關(guān)聯(lián)關(guān)系,那么如何區(qū)分一般關(guān)聯(lián)關(guān)系,聚合關(guān)系和組合關(guān)系呢?
  
  一般關(guān)聯(lián):只要一個(gè)對象聯(lián)系到另外一個(gè)對象就形成了關(guān)聯(lián)關(guān)系。如:人和他的貓,黑豹樂隊(duì)和竇唯,PC機(jī)和顯示器。
  
  聚合關(guān)系:一種強(qiáng)關(guān)聯(lián)關(guān)系,它要求有部分和整體的關(guān)系,并且沒有了整體部分也可以獨(dú)立存在。在上面三個(gè)例子中人和它的貓顯然沒有部分和整體的關(guān)系,所以只能是一般的關(guān)聯(lián)關(guān)系。而黑豹樂隊(duì)和竇唯,竇唯等人組成了黑豹樂隊(duì)即:竇唯和黑豹是整體和部分的關(guān)系。
  
  而竇唯脫離了黑豹(早就離開了)更或者黑豹不存在了那么竇唯仍然可以以音樂人的身份存在(即對象仍然可以獨(dú)立存在)所以它屬于聚合關(guān)系。組成關(guān)系是可以共享的。(竇唯也可以加入其他樂隊(duì))。
  
  組合關(guān)系:一種更強(qiáng)的整體和部分的關(guān)系。它并且要求代表整體的對象負(fù)責(zé)代表部分的對象的生命周期,組成關(guān)系是不能共享的。如:PC機(jī)和顯示器的關(guān)系。
  
  我覺得:假如兩個(gè)實(shí)體是整體和部分的關(guān)系,那么它們到底是聚合還是組合,這取決于你的需求。比如說:PC機(jī)和顯示器的關(guān)系,假如你的系統(tǒng)中,顯示器脫離了PC機(jī)就不存在意義了,也可以說:所有顯示器的訪問都是通過PC機(jī)進(jìn)行的,那么你可以把關(guān)系設(shè)定為組合(如你在為一個(gè)只買品牌機(jī)的代理商作系統(tǒng)你可能是可以這么作的)。
  
  假如你的顯示器脫離的PC機(jī)仍然可以獨(dú)立存在,也就是說在系統(tǒng)中可以直接訪問顯示器對象,那么你可以將關(guān)系設(shè)為聚合(如你在為一個(gè)買散件的代理商作系統(tǒng)你可能是可以這么作的)
  
  5.繼續(xù)
  
  這個(gè)我不想多講了,用過面向?qū)ο蟮恼Z言都應(yīng)該知道。
  
  二.關(guān)系數(shù)據(jù)庫的關(guān)系
  
  一對一
  
  一對多
  
  多對一
  
  多對多
  
  三.o/r mapping策略
  
  1.繼續(xù):
  
  對于繼續(xù)關(guān)系一般有三種策略:
  
  策略1繼續(xù)樹的每個(gè)類對應(yīng)一個(gè)表
  
  <joined-subclass >//共享主鍵
  
  策略2繼續(xù)樹的根類對應(yīng)一個(gè)表
  
  <discriminator ><subclass >//需要添加一個(gè)識別字段
  
  策略3繼續(xù)樹的葉子類對應(yīng)一個(gè)表,不支持多態(tài)查詢
  
  2.關(guān)聯(lián)
  
  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表多對多的關(guān)系需要引入C表。
  
  C表中的所有屬性即為主鍵又為外鍵分別參照A,B兩表。
  
  C表中不可以有其他屬性
  
  策略2:將多對多拆分成兩個(gè)一對多:
  
  A,B對象多對多的關(guān)系需要引入C對象。使得A,B兩對象與C對象的關(guān)系為一對多。對應(yīng)數(shù)據(jù)庫中:A,B表多對多的關(guān)系需要引入C表。A,B兩表與C表的關(guān)系為一對多。
  
  C表又自己的主鍵
  
  C表中又非主鍵的外鍵分別參照A,B兩表。
  
  C表中不可以有其他屬性
  
  如;學(xué)生 ,課程為多對多的關(guān)系 那么引入學(xué)生選課。
  
  注重:策略1和策略2的不同在于:策略2引入了新的對象而策略1沒有。這是因?yàn)檫@樣:策略1的c表不能又自己的東西。而策略2有。
  
  2.5 其他
  
  上面說過:聚合與組成是關(guān)聯(lián)的一種所以他們也符合以上策略。
  
  非凡的:當(dāng)用到組合關(guān)系的是否我們可用用到hibernate的"組件"
  
  <component>
  
  由于"組件"它完全可以滿足組成關(guān)系的強(qiáng)關(guān)聯(lián)。
  
  3.依靠
  
  一般不在實(shí)體域?qū)ο笾畜w現(xiàn)。
  
  O/R MAPPING (HIBERNATE)方法小結(jié) (補(bǔ)充內(nèi)容):
  
  另外我看到了一種"鍵關(guān)聯(lián)"的方法,感覺很有道理。我理解了一下總結(jié)如下:
  
  1.一般關(guān)聯(lián):
  
  這種方法對于一般的關(guān)聯(lián)總是引入c表(另外的一張表)僅僅表示關(guān)系。
  
  C表的主鍵有分別指向A,B兩表(外鍵)。當(dāng)指向一方的外鍵unique="true"即唯一,那么這一方為"一",反之為"多"的一方。這樣就可以形成一般的關(guān)聯(lián)關(guān)系。但是注重的是:c表不映射為對象。C表也沒有自己的屬性。
  
  2.聚合和組成
  
  當(dāng)實(shí)體A的非主鍵列中有一個(gè)引自實(shí)體B的時(shí)候,這種關(guān)系是B聚合A。假如這種引用是強(qiáng)制性的,則是合成關(guān)系,否則為聚合關(guān)系。是否為強(qiáng)制性,只需要將引用列設(shè)為非空即可;
  
  3.繼續(xù)
  
  當(dāng)實(shí)體A的主鍵引用自實(shí)體B的時(shí)候(即為外鍵),那么A繼續(xù) B。
  
  總結(jié):我覺得O/RM的方法有很多,我們可以看到"按外鍵"的方法思路很清楚。但是它在解決一般的關(guān)聯(lián)的時(shí)候總是引入另外一張表這樣勢必影響效率。另外,既然聚合和組合是關(guān)聯(lián)的一種那么即使是組合關(guān)系我也把它看成一般關(guān)聯(lián),也不算錯(cuò)的。
  
  關(guān)系數(shù)據(jù)庫一開始就不是為了面向?qū)ο蟮恼Z言服務(wù)的,所以我們在這里映射無論那種方法似乎都不能說是完全的,正確無誤完成了O/RM。所以我覺得一切都要看我們的項(xiàng)目需求。因地制宜!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 浪卡子县| 平塘县| 新密市| 临夏市| 边坝县| 元谋县| 泸州市| 华池县| 麻栗坡县| 夏邑县| 巴塘县| 泰和县| 榆中县| 兰溪市| 绥宁县| 涡阳县| 金秀| 文登市| 兴隆县| 乡宁县| 鄄城县| 铁力市| 社旗县| 红安县| 镇平县| 绍兴县| 玉屏| 黔江区| 阿克苏市| 尖扎县| 洞头县| 兴和县| 靖远县| 澳门| 师宗县| 拜城县| 金山区| 柳河县| 兰溪市| 彩票| 丹棱县|