




已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Hibernate映射解析七種映射關(guān)系博客分類: Hibernatehibernate首先我們了解一個(gè)名詞ORM,全稱是(Object Relational Mapping),即對(duì)象關(guān)系映射。ORM的實(shí)現(xiàn)思想就是將關(guān)系數(shù)據(jù)庫中表的數(shù)據(jù)映射成對(duì)象,以對(duì)象的形式展現(xiàn),這樣開發(fā)人員就可以把對(duì)數(shù)據(jù)庫的操作轉(zhuǎn)化為對(duì)這些對(duì)象的操作。Hibernate正是實(shí)現(xiàn)了這種思想,達(dá)到了方便開發(fā)人員以面向?qū)ο蟮乃枷雭韺?shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。Hibernate在實(shí)現(xiàn)ORM功能的時(shí)候主要用到的文件有:映射類(*.java)、映射文件(*.hbm.xml)和數(shù)據(jù)庫配置文件(*.properties/*.cfg.xml),它們各自的作用如下。映射類(*.java):它是描述數(shù)據(jù)庫表的結(jié)構(gòu),表中的字段在類中被描述成屬性,將來就可以實(shí)現(xiàn)把表中的記錄映射成為該類的對(duì)象了。映射文件(*.hbm.xml):它是指定數(shù)據(jù)庫表和映射類之間的關(guān)系,包括映射類和數(shù)據(jù)庫表的對(duì)應(yīng)關(guān)系、表字段和類屬性類型的對(duì)應(yīng)關(guān)系以及表字段和類屬性名稱的對(duì)應(yīng)關(guān)系等。數(shù)據(jù)庫配置文件(*.properties/*.cfg.xml):它是指定與數(shù)據(jù)庫連接時(shí)需要的連接信息,比如連接哪種數(shù)據(jù)庫、登錄數(shù)據(jù)庫的用戶名、登錄密碼以及連接字符串等。當(dāng)然還可以把映射類的地址映射信息放在這里。接下來讓我們就一起走進(jìn)Hibernate的七種映射關(guān)系:1、單向一對(duì)一關(guān)聯(lián)映射(one-to-one):兩個(gè)對(duì)象之間一對(duì)的關(guān)系,例如:Person(人)-IdCard(身份證)有兩種策略可以實(shí)現(xiàn)一對(duì)一的關(guān)聯(lián)映射:*主鍵關(guān)聯(lián):即讓兩個(gè)對(duì)象具有相同的主鍵值,以表明它們之間的一一對(duì)應(yīng)的關(guān)系;數(shù)據(jù)庫表不會(huì)有額外的字段來維護(hù)它們之間的關(guān)系,僅通過表的主鍵來關(guān)聯(lián)。如下圖:例子:?jiǎn)蜗蛞粚?duì)一主鍵關(guān)聯(lián)例子連接*唯一外鍵關(guān)聯(lián):外鍵關(guān)聯(lián),本來是用于多對(duì)一的配置,但是加上唯一的限制之后(采用標(biāo)簽來映射,指定多的一端unique為true,這樣就限制了多的一端的多重性為一),也可以用來表示一對(duì)一關(guān)聯(lián)關(guān)系,其實(shí)它就是多對(duì)一的特殊情況。如下圖:例子:?jiǎn)蜗蛞粚?duì)一唯一外鍵關(guān)聯(lián)例子連接注意:因?yàn)橐粚?duì)一的主鍵關(guān)聯(lián)映射擴(kuò)展性不好,當(dāng)我們的需要發(fā)生改變想要將其變?yōu)橐粚?duì)多的時(shí)候變無法操作了,所以我們遇到一對(duì)一關(guān)聯(lián)的時(shí)候經(jīng)常會(huì)采用唯一外鍵關(guān)聯(lián)來解決問題,而很少使用一對(duì)一主鍵關(guān)聯(lián)。2、單向多對(duì)一關(guān)聯(lián)映射(many-to-one):多對(duì)一關(guān)聯(lián)映射原理:在多的一端加入一個(gè)外鍵,指向一的一端,如下圖:關(guān)鍵映射代碼在多的一端加入如下標(biāo)簽映射:Java代碼1. 3、單向一對(duì)多關(guān)聯(lián)映射(one-to-many):一對(duì)多關(guān)聯(lián)映射和多對(duì)一關(guān)聯(lián)映射原理是一致的,都是在多的一端加入一個(gè)外鍵,指向一的一端。如下圖(學(xué)生和班級(jí)):注意:它與多對(duì)一的區(qū)別是維護(hù)的關(guān)系不同*多對(duì)一維護(hù)的關(guān)系是:多指向一的關(guān)系,有了此關(guān)系,加載多的時(shí)候可以將一加載上來*一對(duì)多維護(hù)的關(guān)系是:一指向多的關(guān)系,有了此關(guān)系,在加載一的時(shí)候可以將多加載上來關(guān)鍵映射代碼在一的一端加入如下標(biāo)簽映射:Java代碼1. 2. 3. 4. 缺陷:因?yàn)槎嗟囊欢薙tudent不知道Classes的存在(也就是Student沒有維護(hù)與Classes的關(guān)系)所以在保存Student的時(shí)候關(guān)系字段classesid是為null的,如果將該關(guān)系字段設(shè)置為非空,則將無法保存數(shù)據(jù),常用解決辦法是改用雙向關(guān)聯(lián)映射,參見6。4、單向多對(duì)多映射(many-to-many):多對(duì)多關(guān)聯(lián)映射新增加一張表才完成基本映射,如下圖:關(guān)鍵映射代碼可以在User的一端加入如下標(biāo)簽映射:Java代碼1. 2. 3. 4. 5、雙向一對(duì)一關(guān)聯(lián)映射:對(duì)比單向一對(duì)一映射,需要在IdCard加入標(biāo)簽,它不影響,只影響加載。如下圖:雙向一對(duì)一主鍵映射關(guān)鍵映射代碼在IdCard端新加入如下標(biāo)簽映射:Java代碼1. 雙向一對(duì)一唯一外鍵映射關(guān)鍵映射代碼在IdCard端新加入如下標(biāo)簽映射:Java代碼1. 注意:一對(duì)一唯一外鍵關(guān)聯(lián)雙向采用標(biāo)簽映射,必須指定標(biāo)簽中的property-ref屬性為關(guān)系字段的名稱6、雙向一對(duì)多關(guān)聯(lián)映射(非常重要):采用一對(duì)多雙向關(guān)聯(lián)映射的目的主要是為了主要是為了解決一對(duì)多單向關(guān)聯(lián)的缺陷而不是需求驅(qū)動(dòng)的。一對(duì)多雙向關(guān)聯(lián)的映射方式:* 在一的一端的集合上采用標(biāo)簽,在多的一端加入一個(gè)外鍵* 在多的一端采用標(biāo)簽注意:標(biāo)簽和標(biāo)簽加入的字段保持一直,否則會(huì)產(chǎn)生數(shù)據(jù)混亂關(guān)鍵映射代碼:在Classes的一端加入如下標(biāo)簽映射:Java代碼1. 2. 3. 4. 在Student的一端加入如下標(biāo)簽映射:Java代碼1. 注釋:inverse屬性* inverse屬性可以用在一對(duì)多和多對(duì)多雙向關(guān)聯(lián)上,inverse屬性默認(rèn)為false,為false表示本端可以維護(hù)關(guān)系,如果inverse為true,則本端不能維護(hù)關(guān)系,會(huì)交給另一端維護(hù)關(guān)系,本端失效。所以一對(duì)多關(guān)聯(lián)映射我們通常在多的一端維護(hù)關(guān)系,讓一的一端失效。* inverse是控制方向上的反轉(zhuǎn),只影響存儲(chǔ)7、雙向多對(duì)多關(guān)聯(lián)映射:雙向的目的就是為了兩端都能將對(duì)方加載上來,和單向多對(duì)多的區(qū)別就是雙向需要在兩端都加入標(biāo)簽映射,需要注意的是:* 生成的中間表名稱必須一樣* 生成的中間表中的字段必須一樣Role(角色)端關(guān)鍵映射代碼:Java代碼1. 2. 3. 4. lt;/setUser(用戶)端關(guān)鍵映射代碼:Java代碼1. 2. 3. 4. lt;/set總結(jié):對(duì)于上面這七種關(guān)聯(lián)映射中,最重要的就是一對(duì)多的映射,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030中國天然營養(yǎng)食品行業(yè)市場(chǎng)發(fā)展態(tài)勢(shì)分析及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 教師培訓(xùn)的心得體會(huì)與反思
- 一年級(jí)下學(xué)期語文課堂活動(dòng)安排
- 九年級(jí)英語跨學(xué)科項(xiàng)目計(jì)劃
- 離職證明書員工離職證明說明離職原因(7篇)
- 家庭教育中的懲戒方法心得體會(huì)
- 水利工程項(xiàng)目評(píng)估與質(zhì)量控制措施
- 教育資源平臺(tái)開發(fā)與維護(hù)合同
- 地震災(zāi)后重建施工維護(hù)措施
- 假如我有一雙翅膀作文10篇范文
- 國際經(jīng)濟(jì)與金融合作中的文化差異與應(yīng)對(duì)策略
- 精準(zhǔn)結(jié)直腸癌外科診療專家共識(shí)(2025版)解讀
- 長壽風(fēng)險(xiǎn)課件
- 2025-2030中國海運(yùn)拼箱行業(yè)市場(chǎng)發(fā)展現(xiàn)狀及競(jìng)爭(zhēng)格局與投資前景研究報(bào)告
- 2025年三片式球閥項(xiàng)目建議書
- 2025年四川省成都市青羊區(qū)中考數(shù)學(xué)二診試卷
- 2025年平面設(shè)計(jì)師專業(yè)能力測(cè)試卷:平面設(shè)計(jì)作品集制作與展示策略分析技巧分析試題
- 2025中國臨床腫瘤學(xué)會(huì)CSCO非小細(xì)胞肺癌診療指南要點(diǎn)解讀課件
- 同意開票協(xié)議書范本
- 混凝土地面拆除合同協(xié)議
- 《數(shù)據(jù)資源入表白皮書2023》
評(píng)論
0/150
提交評(píng)論