![09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第1頁(yè)](http://file4.renrendoc.com/view/f8551776764fabe69d050dbb678f4bcf/f8551776764fabe69d050dbb678f4bcf1.gif)
![09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第2頁(yè)](http://file4.renrendoc.com/view/f8551776764fabe69d050dbb678f4bcf/f8551776764fabe69d050dbb678f4bcf2.gif)
![09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第3頁(yè)](http://file4.renrendoc.com/view/f8551776764fabe69d050dbb678f4bcf/f8551776764fabe69d050dbb678f4bcf3.gif)
![09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第4頁(yè)](http://file4.renrendoc.com/view/f8551776764fabe69d050dbb678f4bcf/f8551776764fabe69d050dbb678f4bcf4.gif)
![09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第5頁(yè)](http://file4.renrendoc.com/view/f8551776764fabe69d050dbb678f4bcf/f8551776764fabe69d050dbb678f4bcf5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京傳智播客教育 Hibernate多對(duì)多關(guān)聯(lián)關(guān)系映射李 若 亮北京傳智播客教育 多對(duì)多關(guān)系日常事務(wù)處理中,存在有如下模型一位講師帶多名學(xué)生的課程,一位學(xué)生聽(tīng)多名講師的課程,在此,講師與學(xué)生形成了多對(duì)多的映射關(guān)系一位用戶(hù)有多個(gè)角色,一個(gè)角色有多個(gè)用戶(hù),用戶(hù)與角色形成了多對(duì)多的關(guān)系此時(shí)需要添加中間關(guān)系表來(lái)描述上述現(xiàn)象講師表 關(guān)系表 學(xué)生表Hibernate中使用多對(duì)多的關(guān)系映射描述上述現(xiàn)象編號(hào)姓名昵稱(chēng)1李若亮Jock2張三豐祖師編號(hào)tea_idStu_id121212編號(hào)姓名班級(jí)1張翠山武當(dāng)2張三Java北京傳智播客教育 多對(duì)多數(shù)據(jù)庫(kù)表(左方)創(chuàng)建教師表,用于描述多對(duì)多關(guān)系中的左方北京傳智播客教
2、育 多對(duì)多數(shù)據(jù)庫(kù)表(右方)創(chuàng)建學(xué)生表,用于描述多對(duì)多關(guān)系中的右方北京傳智播客教育 多對(duì)多數(shù)據(jù)庫(kù)表(關(guān)系表)創(chuàng)建關(guān)系表,用于描述多對(duì)多關(guān)系中的關(guān)系表北京傳智播客教育 多對(duì)多模型(左方)創(chuàng)建教師類(lèi),用于描述多對(duì)多中的左方,并在類(lèi)中描述一個(gè)老師對(duì)應(yīng)多個(gè)學(xué)生的關(guān)系由于學(xué)生信息不能重復(fù),因此使用Set集合進(jìn)行描述Set集合初始化為任意Set模型集合,推薦使用HashSet北京傳智播客教育 多對(duì)多模型(右方)創(chuàng)建學(xué)生類(lèi),用于描述多對(duì)多中的右方,并在類(lèi)中描述一個(gè)學(xué)生對(duì)應(yīng)多個(gè)老師的關(guān)系由于教師信息不能重復(fù),因此使用Set集合進(jìn)行描述Set集合初始化為任意Set模型集合,推薦使用HashSet北京傳智播客教育
3、多對(duì)多配置關(guān)系(左方)創(chuàng)建學(xué)生模型配置文件TeacherModel.hbm.xml,用于描述多對(duì)多中的左方,并在配置中添加對(duì)應(yīng)關(guān)系多對(duì)多關(guān)系中左方需要在配置文件中描述多對(duì)多的關(guān)系北京傳智播客教育 多對(duì)多配置關(guān)系(右方)創(chuàng)建學(xué)生模型配置文件StudentModel.hbm.xml ,用于描述多對(duì)多中的左方,并在配置中添加對(duì)應(yīng)關(guān)系多對(duì)多關(guān)系中左方需要在配置文件中描述多對(duì)多的關(guān)系北京傳智播客教育 多對(duì)多配置關(guān)系(屬性)在class配置中設(shè)置多對(duì)多的關(guān)系 模型中的集合名稱(chēng)關(guān)系表表名關(guān)系表中模型外鍵關(guān)聯(lián)模型類(lèi)名關(guān)系表中關(guān)聯(lián)模型外鍵本方關(guān)聯(lián)方北京傳智播客教育 多對(duì)多關(guān)系資源注冊(cè)最后將兩個(gè)資源文件全部注冊(cè)到
4、系統(tǒng)配置中多對(duì)多關(guān)系配置完成北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(單增)單獨(dú)添加數(shù)據(jù)與多對(duì)多映射沒(méi)有任何關(guān)系,屬于Hibernate的基本操作北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(同增)同時(shí)添加,需要先指定對(duì)象間的關(guān)系首先關(guān)聯(lián)多對(duì)多的關(guān)系sm.getTeachers().add(tm);tm.getStudents().add(sm);添加對(duì)應(yīng)的記錄s.save(sm);s.save(tm);此時(shí)會(huì)在關(guān)系表中創(chuàng)建兩個(gè)關(guān)聯(lián)關(guān)系,原因就是兩個(gè)對(duì)象都進(jìn)行了關(guān)系維護(hù),也就是在添加sm與tm時(shí),分別對(duì)關(guān)系進(jìn)行了維護(hù)操作北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(同增)在進(jìn)行多對(duì)多的同時(shí)添加時(shí)
5、,由于不存在明確的A到B的關(guān)系和B到A的關(guān)系,因此無(wú)法確認(rèn)明確的主從方此時(shí),通常根據(jù)業(yè)務(wù)來(lái)確定主從方。此業(yè)務(wù)中,通常設(shè)定學(xué)生方為主方,教師方為從方。上述問(wèn)題解決方案,使從方不具備關(guān)系維護(hù)能力斷開(kāi)從方的關(guān)系維護(hù),為從方添加inverse=“true”北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(添加關(guān)系)當(dāng)雙方實(shí)體不具有關(guān)聯(lián)關(guān)系時(shí),為其添加關(guān)聯(lián)關(guān)系StudentModel sm = (StudentModel) s.get(StudentModel.class, 2L);TeacherModel tm = (TeacherModel) s.get(TeacherModel.class, 2L);s
6、m.getTeachers().add(tm);tm.getStudents().add(sm);注意:如果此時(shí)雙方都能維護(hù)關(guān)系,關(guān)系表中將出現(xiàn)兩條關(guān)聯(lián)數(shù)據(jù)解決方案:使其中一方失去關(guān)系維護(hù)權(quán),綁定關(guān)系時(shí)就不會(huì)出現(xiàn)兩條關(guān)聯(lián)數(shù)據(jù)了北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(刪除關(guān)系)當(dāng)雙方實(shí)體具有關(guān)聯(lián)關(guān)系時(shí),為其解除關(guān)聯(lián)關(guān)系StudentModel sm = (StudentModel) s.get(StudentModel.class, 2L);TeacherModel tm = (TeacherModel) s.get(TeacherModel.class, 2L);sm.getTeacher
7、s().remove(tm);tm.getStudents().remove(sm);北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(修改關(guān)系)修改實(shí)體A與B的關(guān)系為實(shí)體A與C的關(guān)系StudentModel sm = (StudentModel) s.get(StudentModel.class, 1L);TeacherModel tm1 = (TeacherModel) s.get(TeacherModel.class, 1L);TeacherModel tm2 = (TeacherModel) s.get(TeacherModel.class, 2L);斷開(kāi)原始的關(guān)系(sm與tm1)sm.ge
8、tTeachers().remove(tm1);tm1.getStudents().remove(sm);添加新的關(guān)系(sm與tm2)sm.getTeachers().add(tm2);tm2.getStudents().add(sm);注意:當(dāng)實(shí)體A與實(shí)體B間存在關(guān)系,需要修改為實(shí)體A與實(shí)習(xí)C間存在關(guān)系時(shí),并不是進(jìn)行修改操作,而是先斷開(kāi)AB之間的關(guān)系,然后建立AC之間的關(guān)系,因此執(zhí)行的應(yīng)該是刪除與添加操作,不是修改操作北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(單刪)單獨(dú)刪除指刪除多對(duì)多中任意一方實(shí)體,同時(shí)將實(shí)體對(duì)應(yīng)關(guān)系刪除掉(主流)StudentModel sm = (StudentMod
9、el) s.get(StudentModel.class, 20L);s.delete(sm);刪除后由于主方負(fù)責(zé)維護(hù)關(guān)系,因此關(guān)系被清除如果換成從方刪除數(shù)據(jù),關(guān)系是否被清除?(非主流)TeacherModel tm = (TeacherModel) s.get(TeacherModel.class, 1L);s.delete(tm);由于設(shè)置了從方不維護(hù)關(guān)系inverse=“true”,因此在操作時(shí)出問(wèn)題,給從方重新分配關(guān)系維護(hù)權(quán)利北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(單刪)解除了關(guān)系維護(hù)限制后,從方也可以進(jìn)行單獨(dú)刪除,并將關(guān)系清除。此時(shí)也就沒(méi)有主從雙方劃分總結(jié):對(duì)于多對(duì)多關(guān)系中,如果
10、明確主從雙方,也就是為從方設(shè)置放棄關(guān)系維護(hù)inverse=“true” ,那么單獨(dú)刪除要從主方發(fā)起,從方不能發(fā)起(主流)對(duì)于多對(duì)多關(guān)系中,如果不明確主從雙方,也就是都不設(shè)置inverse=“true” ,那么單獨(dú)刪除可以從任何一方發(fā)起,但是添加時(shí)的關(guān)系維護(hù)只能由一方發(fā)起,不能雙方都發(fā)起,否則會(huì)出現(xiàn)關(guān)系數(shù)據(jù)重復(fù)現(xiàn)象(非主流)北京傳智播客教育 基于多對(duì)多映射關(guān)系的操作(級(jí)聯(lián)刪除)多對(duì)多關(guān)系中是否可以在刪除一方時(shí),級(jí)聯(lián)另一方,將另一方也刪除。這種業(yè)務(wù)需求在實(shí)際項(xiàng)目中幾乎不存在區(qū)分主從雙方(從方inverse=“true”)刪除主 (成功)刪除從 (失?。┎粎^(qū)分主從雙方(雙方inverse=“false”)刪除任意一方,配置級(jí)聯(lián)刪除cascade=“delete”(成功)此時(shí)關(guān)系維護(hù)受雙
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)青島版一年級(jí)數(shù)學(xué)上冊(cè)口算練習(xí)題總匯
- 2025年?yáng)|莞貨車(chē)從業(yè)資格證考試試題
- 男女之間照顧終生協(xié)議書(shū)(2篇)
- 2024新教材高中政治第二單元經(jīng)濟(jì)發(fā)展與社會(huì)進(jìn)步第四課課時(shí)1我國(guó)的個(gè)人收入分配講義+優(yōu)練含解析部編版必修2
- 星球版地理八年級(jí)上冊(cè)《第一節(jié) 遼闊的疆域》聽(tīng)課評(píng)課記錄3
- 人事主管工作計(jì)劃模板
- 業(yè)務(wù)委托經(jīng)營(yíng)協(xié)議
- 煤炭銷(xiāo)售合作協(xié)議書(shū)范本
- 房屋漏水維修合同范本
- 黃山健康職業(yè)學(xué)院《材料科學(xué)基礎(chǔ)上》2023-2024學(xué)年第二學(xué)期期末試卷
- 交管12123學(xué)法減分題庫(kù)(含答案)
- 山東省濟(jì)南市槐蔭區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- 北京市海淀區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 2025年廣西柳州市中級(jí)人民法院招錄聘用工作人員17人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 煤礦機(jī)電運(yùn)輸培訓(xùn)課件
- “德能勤績(jī)廉”考核測(cè)評(píng)表
- 三年級(jí)下冊(cè)口算天天100題(A4打印版)
- 政務(wù)信息培訓(xùn)ppt課件
- 土的野外鑒別及描述
- 九年級(jí)數(shù)學(xué)上冊(cè)黃金分割PPT課件
評(píng)論
0/150
提交評(píng)論