【Hibernate步步为营】--多对多映射详解
一、單向多對多
? ? ? ? 仍然按照前幾篇的文章格式來討論,首先來看對象之間的關系,單向的多對多關系是兩個對象之間發生的,比如在人和職位之間,一個人可以有多個職位,而且一個職位也可以由多人來負責,所以它們之間就形成了多對多的關系,另外這種單向性是指只能在一端來查詢獲取另一端的內容。另外因為是多對多之間的關系,所以在生成關系模型時會生成對象之間的關聯表,實際它們之間的關系的是關聯表,具體的對象模型如下:
? ? ? ?上面已經說過多對多的關系會生成一個關聯表,在關聯表中來維護之間的關系,所以對應的關系模型中會有一個關系表,這個關系表中存放著兩個關系表的主鍵,并且關系表的主鍵是另外兩張表的主鍵的組合,如下圖:
? ?1.1、映射
? ? ? ? 上面的關系模型中會生成一個關系表,所以在映射中要編寫對應的屬性,因為是單向的關聯關系所以主要的映射關系是在映射的原方向添加的,對應的上面的關系模型上就是在T_user中添加多對多映射的關系。
? ? 1.1.1 User.hbm.xml
? ? ? ? 文件中要使用<many-to-many>標簽,并且在標簽中添加上對應的列關系,因為你要讓兩個對象中都要清楚它們之間的映射是如何使用的,并且在生成的關系表中哪一列是對應的自己的外鍵,所以要在該標簽中指明,另外在<set>標簽中添加table屬性會指明要生成新表,下面的示例中添加了t_user_role,所以會生成新的關聯表。
[html] view plain copy? ? 1.1.2 Role.hbm.xml
? ? ? ?因為是單向的關系,所以在該映射文件中就不需要添加多余的標簽來維護關系了,它的內部代碼也會很簡單,對應的映射代碼如下:
[html] view plain copy
? 1.2、類文件
? ? ? 類文件中代碼的編寫要和映射文件中配置的相同,它們之間是相互對應的,在user中因為使用了<set>映射,所以在相應的類文件中也要添加Haseset來標明之間的映射關系。
? ? 1.2.1 User.java
? ? ?類代碼沒有什么好討論的了,里面的內容和前幾篇文章的大致相同,除了基本的屬性和方法外還需要添加對應的HashSet。
? ? 1.2.2 Role.java
? ? ?基本的屬性和方法,它的頁面代碼是非常簡單基礎的,不需要添加任何復雜的內容。[java] view plain copy
? ? ?生成的表結構如下:
? 1.3、操作
? ? ?1.3.1 插入操作
? ? ? 演示插入操作,新創建表后向表中寫入數據,對應著關系模型,在關系模型中最復雜的是關聯表部分,需要添加多個對應角色,并把角色分配到對應的表中,所以首先要創建關系并把關系保存到數據庫中,然后創建用戶Hash表,在Hash表中添加對應的關系,最后創建用戶,然后將Hash表添加到用戶上,代碼如下: [java] view plain copy
? ? ?1.3.2 讀取操作
? ? ? 讀取操作相對于寫入來說就很簡單了,因為是單向的關系,所以在讀取時只能通過一端來讀取另一端的內容,也就是說通過User對象來讀取Role的內容,如下代碼:
[java] view plain copy二、雙向多對多
? ? ? ? 雙向的多對多映射可以看做是單向的一種擴展,它其實是為了設置在兩端同時維護關系,從任何一端都能夠加載到另一端的內容,在實現上和單向的起始端是相同的都要使用<many-to-many>標簽。
? ? ? ? 同樣以上面的User和Role來做示例,上面的示例中使用了單向的多對多,不同的是這里要使用雙向關系,所以要在Role的一端添加同樣的映射關系,并在相應的對象中添加集合映射,其中對應的User內的代碼不會發生改變。
? ?2.1 Role.hbm.xml
? ? ? ?因為是雙向的多對多所以要在對象的兩端同時加入雙向的集合映射,也就是在配置文件中添加<set>標簽,并在標簽中添加<many-to-many>標簽,具體的配置方法類似于上文的User.hbm.xml的配置方法,如下:
[html] view plain copy??2.2 Role.java
? ? 同單向的多對多關系中的文件相同,不過需要在對象中添加集合映射Set,使用set來標明映射的集合,如下代碼:
[java] view plain copy? ? ? ?雙向關聯映射是在單向的關聯映射基礎上配置而來的,只需要在映射文件的兩端同時配置<many-to-many>即可,也就是說User.hbm.xml和User.java代碼和上文中的代碼相同,不發生變化,所以不再重復添加了。
結語
總結
以上是生活随笔為你收集整理的【Hibernate步步为营】--多对多映射详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Hibernate步步为营】--(一对
- 下一篇: 【Hibernate步步为营】--关联映