1. 程式人生 > >web開發(十一)之Hibernate關聯關係配置

web開發(十一)之Hibernate關聯關係配置

寫在前面

Hibernate中關係的對映共有以下四種:一對多、多對一、一對一、多對多這四種。

一對多單向關聯 xml對映

一對多即在A表中的每一條資料都會與B表中的n條有關聯;在這種情況下一般都是在B表新增一個欄位用來當作外來鍵與A表中的主鍵相關聯。而這種關聯反饋到Hibernate中時,單向有兩種方法:

一種為在A表對映的類中新增一個集合,集合的泛型為B表對映的類,對映物件中儲存的是B表中資料對映的物件,在關係對映檔案中需要新增相應的,該標籤中需指定name屬性用來表示集合中儲存的物件,並且該標籤中需要有兩個子:設定class屬性指定B表對映的類;需要設定column屬性指定對應表中的哪一列,範例程式碼如下

<!-- depart_id為外來鍵 -->
<set name="emps">  
           <key column="depart_id"/>  
           <one-to-many class="Employee"/>  
 </set>  

另一種是在B表中新增一個A表對映類的物件。在關係對映檔案中需要新增,需要指定name屬性指定物件名稱,column屬性指定對應表中的欄位名稱,範例程式碼如下

<!-- depart_id為外來鍵 -->
<many-to-one name="depart"
column="depart_id"/>

一對多雙向關聯 xml對映

雙向管理即兩種單向關聯同時加入即可。為節省版面,就不在此書寫了

多對一單向,雙向關聯對映 xml對映

多對一其實與一對多是一樣的,只要弄清楚裡面的幾個屬性的配置,只要掌握一種,另一種就自然學會了。

一對一對映 xml對映

一對一即在A表中的每一條資料都會與B表中的1條資料有關聯;這種情況下在DB中可以在任意表中建立一個欄位與另一個表的主鍵形成關聯外來鍵,亦可以直接將某一表的主鍵直接設定成外來鍵與另一表的主鍵關聯。在Hbiernatez中同樣的有單向關聯與雙向關聯,雙向關聯也是兩種單向關聯同時應用而已。

首先在一對一關聯中需要搞清楚兩個表的主從關係,比如一個人與一張身份證,一張身份證只能屬於一個人,主就是人。所以在人的關係對映檔案中即需要新增標籤,範例如下

<one-to-one name="idCard"></one-to-one> 

而如果在身份證的關係對映檔案中則需要新增標籤,因為身份證與人的關係相當於多對一的關係(這裡比較繁瑣,需要仔細想想,推敲一下,就明白了)。範例如下

<many-to-one name="person" column="person_id"/>  

另外一種將主鍵直接設定成外來鍵的方法,在關係對映檔案中需要將主鍵標籤中的class屬性設定為”foreign”,並新增子標籤,標籤體為關聯的物件名稱。範例如下

<id name="id"column="id">  
       <generator class="foreign">  
           <param name="property">person</param>  
       </generator>  
</id> 

多對多對映 xml對映

多對多的關係比較複雜,在DB中體現為需要建立第三張表C表,用來存放A表與B表的主鍵,並同時將這兩個主鍵作為C表的主鍵。其實也可以看成A表與C表形成了多對一的關係,同時A表與C表也行程了多對一的關係,這樣在Hibernate中則只需要將A表對映的類與B表對映的類分別新增一個集合屬性,泛型指定對方為對方類即可,在關係表中則需要在標籤中新增的子標籤即可。

注:在實際應用中,多對多關係的查詢是十分緩慢的,所以應儘量避免多對多關係的出現。