Hibernate關(guān)聯(lián)關(guān)系配置_第1頁
Hibernate關(guān)聯(lián)關(guān)系配置_第2頁
Hibernate關(guān)聯(lián)關(guān)系配置_第3頁
Hibernate關(guān)聯(lián)關(guān)系配置_第4頁
Hibernate關(guān)聯(lián)關(guān)系配置_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Hbernate關(guān)聯(lián)關(guān)系配置(一對多、一對一和多對多)Hibernate 關(guān)聯(lián)關(guān)系配置第一種關(guān)聯(lián)關(guān)系:一對多(多對一)一對多是最普遍的映射關(guān)系,簡單來講就如消費(fèi)者與訂單的關(guān)系。 一對多:從消費(fèi)者角的度來說一個消費(fèi)者可以有多個訂單,即為一對 多。多對一:從訂單的角度來說多個訂單可以對應(yīng)一個消費(fèi)者,即為多對一對多關(guān)系在hbm文件中的配置信息:!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN HYPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hiber

2、nate-mapping-3.0.dtd!-主鍵設(shè)置- generator class=uuid/generator !-屬性設(shè)置-property name = username column=usernametype=string/propertyproperty name=balance column=balance type=integer/propertyset name=orders inverse=true cascade=allkey column =customer_id /keyone-to-many class=com.suxiaolei.hibernate.pojosO

3、rder/set/class/hibernate-mapping訂單(多方):!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN HYPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hibernate-mapping-3.0.dtdgenerator class=uuid/generatorproperty name=orderNumber column=orderNumbertype=string/propertyproperty name=cos

4、t column=cost type=integer/propertymany-to-one name=customer class=com.suxiaolei.hibernate.pojos.Customerco=customer_id cascade=save-update/many-to-one/class/hibernate-mapping一對多關(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)。例如:電子產(chǎn)品電腦WP7

5、IOS平板電腦筆電子產(chǎn)品電腦WP7IOS平板電腦筆自身一對多關(guān)聯(lián)自身的hbm文件設(shè)置:!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN HYPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hibernate-mapping-3.0.dtdgenerator class=uuid/generatorproperty name=name column=name type=string/propertyset name=chidrenCategories

6、 cascade=all inverse=truekey column=category_id/keyone-to-many class=com.suxiaolei.hibernate.pojos.Category/ /setmany-to-one name=parentCategoryclass=com.suxiaolei.hibernate.pojosCategory column=category_id/many-to-one/class/hibernate-mapping外鍵存放父親的主鍵。第二種關(guān)聯(lián)關(guān)系:多對多多對多關(guān)系也很常見,例如學(xué)生與選修課之間的關(guān)系,一個學(xué)生 可以選擇多門選修

7、課,而每個選修課又可以被多名學(xué)生選擇。數(shù)據(jù)庫 中的多對多關(guān)聯(lián)關(guān)系一般需采用中間表的方式處理,將多對多轉(zhuǎn)化為 兩個一對多。數(shù)據(jù)表間多對多關(guān)系如下圖:多對多關(guān)系在hbm文件中的配置信息: 學(xué)生:!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN HYPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hibernate-mapping-3.0.dtdcolumn name=id/columngenerator class=increment/generato

8、rproperty name=name column=name type=string/propertykey column=student_id/keymany-to-many class=com.suxiaolei.hibernate.pojos.Course coli=icourse_id/many-to-many/set/class/hibernate-mapping課程:?xml version=1.0 encoding=utf-8?!DOCTYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN H

9、YPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hibernate-mapping-3.0.dtdclass name=com.suxiaolei.hibernate.pojosCourse table=courseid name=id type=integercolumn name=id/columngenerator class=increment/generator/idproperty name=name column=name type=string/propertyset name=students inverse=true cas

10、cade=save-update table=student_coursemany-to-many class=com.suxiaolei.hibernate.pojos.Student colMistudentidx/many-to-many/set/class/hibernate-mapping其實(shí)多對多就是兩個一對多,它的配置沒什么新奇的相對于一對多。在多對多的關(guān)系設(shè)計中,一般都會使用一個中間表將他們拆分成兩個一對多。set標(biāo)簽中的table屬性就是用于指定中間表的。 中間表一般包含兩個表的主鍵值,該表用于存儲兩表之間的關(guān)系。由 于被拆成了兩個一對多,中間表是多方,它是使用外鍵關(guān)聯(lián)的,k

11、ey 是用于指定外鍵的,用于從中間表取出相應(yīng)的數(shù)據(jù)。中間表每一行數(shù) 據(jù)只包含了兩個關(guān)系表的主鍵,要獲取與自己關(guān)聯(lián)的對象集合,還需 要取出由外鍵所獲得的記錄中的另一個主鍵值,由它到對應(yīng)的表中取 出數(shù)據(jù),填充到集合中。manytomany 中的column屬性是 用于指定按那一列的值獲取對應(yīng)的數(shù)據(jù)。例如用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表中檢索出

12、相關(guān)的student數(shù)據(jù)。其實(shí),為了便于理解, 你可以在使用course表的使用就把中間表看成是student 表,反 之亦然。這樣就可以使用一對多的思維來理解了,多方關(guān)聯(lián)一方需要 外鍵那么在本例子中就需要course_id來關(guān)。第三種關(guān)聯(lián)關(guān)系:一對一一對一關(guān)系就球隊與球隊所在地之間的關(guān)系,一支球隊僅有一個 地址,而一個地區(qū)也僅有一支球隊(貌似有點(diǎn)勉強(qiáng),將就下吧)。數(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文件中的配置信息: 地址:!DOCTY

13、PE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN HYPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hibernate-mapping-3.0.dtdcolumn name=idproperty name=city column=city type=string/propertyone-to-one name=team class=com.suxiaolei.hibernate.pojos.Teamcascade=all/one-to-one 球隊:!DOC

14、TYPE hibernate-mapping PUBLIC -/Hibernate/Hibernate Mapping DTD 3.0/EN HYPERLINK /hibernate-mapping-3.0.dtd%22%e3%80%89 /hibernate-mapping-3.0.dtdcolumn name=id/columngenerator class=increment/generator/idproperty name=name column=name type=string/propertymany-to-one name=adress class=com.suxiaolei.

15、hibernate.pojos.Adresscolumn=adress_id unique=true/many-to-one/class /hibernate-mapping一對一外鍵關(guān)聯(lián),其實(shí)可以看做是一對多的一種特殊形式,多方 退化成一。多方退化成一只需要在 many-to-one標(biāo)簽中設(shè)置 unique=true。hibernate-mappingclass name=com.suxiaolei.hibernate.pojosAdress table=adressid name=id type=integercolumn name=id/columngenerator class=increment/generatorproperty name=city column=city type=string/propertyone-to-one name=team class=com.suxiaolei.hibernate.pojos.Teamcascade=all/one-to-one/class/hibernate-mapping球隊:hibernate-mapping

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論