熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

O/R MAPPING(Hibernate)方法小結

2013-11-23 20:11:26  來源: Java開源技術 

  對象之間的關系
  
  .依賴
  
  依賴對象通過調用被依賴對象的方法來獲得服務一種比較松散的關系並且是短期的我們的過程與對象往往依賴於我們的實體域對象如在struts的action中調用模型層的方法
  
  .關聯
  
  它使一個類指到另一個類的屬性長期的
  
  .聚合
  
  聚合關系是關聯關系的一種是強的關聯關系聚合是整體和部分之間的關系
  
  .組合
  
  也叫合成關系組成關系是關聯關系的一種是比聚合關系強的關系對象負責代表部分的對象的生命周期
  
  注既然聚合組合關系屬於關聯關系那麼如何區分一般關聯關系聚合關系和組合關系呢?
  
  一般關聯只要一個對象聯系到另外一個對象就形成了關聯關系人和他的貓黑豹樂隊和窦唯PC機和顯示器
  
  聚合關系一種強關聯關系它要求有部分和整體的關系並且沒有了整體部分也可以獨立存在在上面三個例子中人和它的貓顯然沒有部分和整體的關系所以只能是一般的關聯關系而黑豹樂隊和窦唯窦唯等人組成了黑豹樂隊即窦唯和黑豹是整體和部分的關系
  
  而窦唯脫離了黑豹(早就離開了)更或者黑豹不存在了那麼窦唯仍然可以以音樂人的身份存在(即對象仍然可以獨立存在)所以它屬於聚合關系組成關系是可以共享的(窦唯也可以加入其他樂隊)
  
  組合關系一種更強的整體和部分的關系它並且要求代表整體的對象負責代表部分的對象的生命周期組成關系是不能共享的PC機和顯示器的關系
  
  我覺得如果兩個實體是整體和部分的關系那麼它們到底是聚合還是組合這取決於你的需求比如說PC機和顯示器的關系如果你的系統中顯示器脫離了PC機就不存在意義了也可以說所有顯示器的訪問都是通過PC機進行的那麼你可以把關系設定為組合(如你在為一個只買品牌機的代理商作系統你可能是可以這麼作的)
  
  如果你的顯示器脫離的PC機仍然可以獨立存在也就是說在系統中可以直接訪問顯示器對象那麼你可以將關系設為聚合(如你在為一個買散件的代理商作系統你可能是可以這麼作的)
  
  .繼承
  
  這個我不想多講了用過面向對象的語言都應該知道
  
  關系數據庫的關系
  
  一對一
  
  一對多
  
  多對一
  
  多對多
  
  o/r mapping策略
  
  .繼承
  
  對於繼承關系一般有三種策略
  
  策略繼承樹的每個類對應一個表
  
  <joinedsubclass >//共享主鍵
  
  策略繼承樹的根類對應一個表
  
  <discriminator ><subclass >//需要添加一個識別字段
  
  策略繼承樹的葉子類對應一個表不支持多態查詢
  
  .關聯
  
   一對一
  
  一半有兩種策略
  
  策略唯一的外鍵
  
  <manytoone>+unique=true (唯一的外鍵)
  <onetoone>
  
  策略共享主鍵
  
  <onetoone>
  <onetoone><constrained=true> //既是主鍵又是外鍵
  
  注意生成方式需要用foreign
  
   一對多(無需多說)
  
   多對一(無需多說)
  
   多對多
  
  策略AB表多對多的關系需要引入C表
  
  C表中的所有屬性即為主鍵又為外鍵分別參照AB兩表
  
  C表中不可以有其他屬性
  
  策略將多對多拆分成兩個一對多
  
  AB對象多對多的關系需要引入C對象使得AB兩對象與C對象的關系為一對多對應數據庫中AB表多對多的關系需要引入C表AB兩表與C表的關系為一對多
  
  C表又自己的主鍵
  
  C表中又非主鍵的外鍵分別參照AB兩表
  
  C表中不可以有其他屬性
  
  如學生 課程為多對多的關系 那麼引入學生選課
  
  注意策略和策略的不同在於策略引入了新的對象而策略沒有這是因為這樣策略的c表不能又自己的東西而策略
  
   其他
  
  上面說過聚合與組成是關聯的一種所以他們也符合以上策略
  
  特別的當用到組合關系的是否我們可用用到hibernate的組件
  
  <component>
  
  由於組件它完全可以滿足組成關系的強關聯
  
  .依賴
  
  一般不在實體域對象中體現
  
  O/R MAPPING (HIBERNATE)方法小結 (補充內容)
  
  另外我看到了一種鍵關聯的方法感覺很有道理我理解了一下總結如下
  
  .一般關聯
  
  這種方法對於一般的關聯總是引入c表(另外的一張表)僅僅表示關系
  
  C表的主鍵有分別指向AB兩表(外鍵)當指向一方的外鍵unique=true即唯一那麼這一方為反之為的一方這樣就可以形成一般的關聯關系但是注意的是c表不映射為對象C表也沒有自己的屬性
  
  .聚合和組成
  
  當實體A的非主鍵列中有一個引自實體B的時候這種關系是B聚合A如果這種引用是強制性的則是合成關系否則為聚合關系是否為強制性只需要將引用列設為非空即可
  
  .繼承
  
  當實體A的主鍵引用自實體B的時候(即為外鍵)那麼A繼承 B
  
  總結我覺得O/RM的方法有很多我們可以看到按外鍵的方法思路很清晰但是它在解決一般的關聯的時候總是引入另外一張表這樣勢必影響效率另外既然聚合和組合是關聯的一種那麼即使是組合關系我也把它看成一般關聯也不算錯的
  
  關系數據庫一開始就不是為了面向對象的語言服務的所以我們在這裡映射無論那種方法似乎都不能說是完全的正確無誤完成了O/RM所以我覺得一切都要看我們的項目需求因地制宜!
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28093.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.