O/R MAPPING (HIBERNATE)方法小結
(一)物件之間的關係:
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.依賴
一般不在實體域物件中體現。
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金科玉律,歡迎大俠高見。APP
- 【開源O/R Mapping框架】OpenORM 0.1RC1版釋出APP框架ORM
- Hibernate in Action: Practical Object/Relational MappingObjectAPP
- R語言結合H2O做深度學習R語言深度學習
- js 字串方法小結JS字串
- 這3張表應該使用 hibernate的哪種mapping?APP
- String方法小總結
- Java打包FatJar方法小結JavaJAR
- R1-010 Linux重定向小結Linux
- js 陣列的方法小結JS陣列
- 前端跨域常用方法小結前端跨域
- CSS清除浮動方法小結CSS
- R小技巧彙總
- 5、處理方法對映(Handler Mapping)APP
- 跪求 hibernate 學習方法
- js陣列操作方法小結JS陣列
- JavaScript建立物件方法例項小結JavaScript物件
- YUIDoc的使用方法小結UI
- Perl指令碼執行方法小結指令碼
- CSS清除浮動常用方法小結CSS
- mysql中複製表結構的方法小結MySql
- 請教:在hibernate應用中,異常“SystemErr R cirrus.hibernate.MappingException: ”。APPException
- 戰略性系統思考方法小結
- ASP.NET MVC輔助方法小結ASP.NETMVC
- 用hibernate實現的小專案
- Hibernate知識點總結
- Hibernate的cascade總結
- Hibernate Search試用總結
- JavaScript裡的陣列Array使用方法總結,超全的oJavaScript陣列
- O2O電子商務:小網站你玩不起網站
- How to enable Hibernate option in windows 2008 R2 server?WindowsServer
- MySQL傳輸表空間小結(r12筆記第2天)MySql筆記
- Hibernate之Query介面的uniqueResult()方法
- 微信小程式 傳值取值的方法總結微信小程式
- Hive表小檔案合併方法總結Hive
- js獲取字串位元組數方法小結JS字串
- Hibernate-hql語法總結.
- Elasticsearch MappingElasticsearchAPP