新聞中心
第一種關(guān)聯(lián)關(guān)系:一對多(多對一)

"一對多"是最普遍的映射關(guān)系,簡單來講就如消費者與訂單的關(guān)系。
一對多:從消費者角的度來說一個消費者可以有多個訂單,即為一對多。
多對一:從訂單的角度來說多個訂單可以對應(yīng)一個消費者,即為多對一。
一對多關(guān)系在hbm文件中的配置信息:
消費者(一方):
訂單(多方):
- column="customer_id" cascade="save-update">
"一對多"關(guān)聯(lián)關(guān)系,Customer方對應(yīng)多個Order方,所以Customer包含一個集合用于存儲多個Order,Order包含一個Customer用于儲存關(guān)聯(lián)自己的Customer。
一對多關(guān)聯(lián)關(guān)系有一種特例:自身一對多關(guān)聯(lián)。例如:
自身一對多關(guān)聯(lián)自身的hbm文件設(shè)置:
外鍵存放父親的主鍵。
第二種關(guān)聯(lián)關(guān)系:多對多
多對多關(guān)系也很常見,例如學(xué)生與選修課之間的關(guān)系,一個學(xué)生可以選擇多門選修課,而每個選修課又可以被多名學(xué)生選擇。數(shù)據(jù)庫中的多對多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對多轉(zhuǎn)化為兩個一對多。
數(shù)據(jù)表間多對多關(guān)系如下圖:
多對多關(guān)系在hbm文件中的配置信息:
學(xué)生:
- column="course_id">
課程:
- column="student_id">
其實多對多就是兩個一對多,它的配置沒什么新奇的相對于一對多。在多對多的關(guān)系設(shè)計中,一般都會使用一個中間表將他們拆分成兩個一對多。
例如用course表來說,它與student表使用一個中間表student_course關(guān)聯(lián)。如果要獲取course記錄對應(yīng)的學(xué)生記錄,首先需要使用外鍵"course_id"從student_course表中取得相應(yīng)的數(shù)據(jù),然后在取得的數(shù)據(jù)中使用"student_id"列的值,在student表中檢索出相關(guān)的student數(shù)據(jù)。其實,為了便于理解,你可以在使用course表的使用就把中間表看成是student表,反之亦然。這樣就可以使用一對多的思維來理解了,多方關(guān)聯(lián)一方需要外鍵那么在本例子中就需要"course_id"來關(guān)。
第三種關(guān)聯(lián)關(guān)系:一對一
一對一關(guān)系就球隊與球隊所在地之間的關(guān)系,一支球隊僅有一個地址,而一個地區(qū)也僅有一支球隊(貌似有點勉強,將就下吧)。數(shù)據(jù)表間一對一關(guān)系的表現(xiàn)有兩種,一種是外鍵關(guān)聯(lián),一種是主鍵關(guān)聯(lián)。圖示如下:
一對一外鍵關(guān)聯(lián):
一對一主鍵關(guān)聯(lián):要求兩個表的主鍵必須完全一致,通過兩個表的主鍵建立關(guān)聯(lián)關(guān)系:
一對一外鍵關(guān)聯(lián)在hbm文件中的配置信息:
地址:
球隊:
一對一外鍵關(guān)聯(lián),其實可以看做是一對多的一種特殊形式,多方退化成一。多方退化成一只需要在
一對一主鍵關(guān)聯(lián)在hbm文件中的配置信息:
地址:
球隊:
- adress
一對一主鍵關(guān)聯(lián),是讓兩張的主鍵值一樣。要使兩表的主鍵相同,只能一張表生成主鍵,另一張表參考主鍵。
- adress
"class"="foreign"就是設(shè)置team表的主鍵參照adress屬性的主鍵值。
文章題目:Hibernate關(guān)聯(lián)關(guān)系配置
URL網(wǎng)址:http://m.fisionsoft.com.cn/article/cdsojeh.html


咨詢
建站咨詢
