http://developer.51cto.com/art/200906/127132.htm
Hibernate如果上手了,那麼在Hibernate中的一對多,多對一,多對多,一對一這些關係,應該很快能理解.
下面就把這幾種關係簡單說一下.
本文中用到的三個實例化類分別爲Customer(保存客戶基本信息),CustomerDetails(保存客戶詳細信息),CustomerBack(中間表,保存兩表之間的關聯)
對應的表功能同上.說明中的主表指Customer,子表指CustomerDetails,中間表指CustomerBack
一對多
﹤set name="CustomerDetails" table="customer_details" |
這段代碼是需要放在一對多中的主表配置中的
◆name:集合屬性的名稱(也可以理解爲一對多中那個子屬性名)
◆table(可選,默認爲屬性的名稱):集合表的名稱(可理解爲一對多中子表的名稱)
◆inverse(可選,默認爲false):標記這個集合作爲雙向關聯關係中的方向的一端
◆cascade(可選:默認爲none):讓操作級聯到子實體
◆sort(可選):指定集合的排序順序
其它如schema,lazy,order–by,where,outer–join,batch–size,access請參照有關書籍.
key 中的column=”cust_Id”,cust_Id並不是主表的字段,而是子表中保存主表的字段.
如主表主鍵爲cust_Id,子表中爲了保存主表的主鍵,也建一個cust_Id,key裏的cust_Id就是指子表中的cust_Id.
one–to–many 中的class爲一對多的子表實例類.
多對一
﹤many to one name="Customer" class="Customer" cascade="all" outer join="false" update="false" insert="false" column="cust_Id" not null="true"/﹥ |
多對一中,沒有像一對多的,而是直接用了many–to–one.這段代碼是需要放在多對一中的子表配置中的(即CustomerDetails的配置中)
◆outer–join:爲外鏈接
◆update,insert:指定對應的字段是否在用於UPDATE和/或INSERT的SQL語句中包含.
◆column:關聯的字段名.(多對主類對應的字段名)
◆not–null:是否爲null.
多對多
﹤set name="CustomerBack" table="customer_back" cascade="all"﹥ ﹤key column="cust_Id"/﹥ ﹤many to many class="CustomerDetails" column="custD_id"/﹥ ﹤/set﹥
多對多的配置與一對多有點類似.這段代碼放的位置也是與一對多的代碼放的位置一樣.
多對多關係中,多采用中間表來關聯兩個有多多關係的表的.如Customer與CustomerDetails存在多對多的關係,那麼往往是用另外一個表如CustomerBack表來保存它們的關係的,也就是中間表.
◆name:屬性的名稱(可理解爲中間表的名稱)
◆table:表的名稱(可理解爲中間表的表名稱)
◆key 裏的cust_Id,是指中間表的cust_Id,爲了保存Customer與CustomerDetails的關係,中間表中分別建了cust_Id(Customer的主鍵)與custD_Id(CustomerDetails的主鍵)
◆many–to–many中的Class是指多對多中的另一個實例化類,column是指CustomerDetails與中間表關聯的字段名.這裏是指中間表的
◆custD_Id,不能理解爲CustomerDetails的主鍵.
一對一
﹤one to one name="CustomerDetails" class="CustomerDetails" cascade="all" /﹥
一對一的關係更簡單.
在Customer表的配置中放上這段代碼就行了.
◆name:屬性名稱
◆class:關聯的實例化類名