




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、北京傳智播客教育 Hibernate多對多關(guān)聯(lián)關(guān)系映射李 若 亮北京傳智播客教育 多對多關(guān)系日常事務(wù)處理中,存在有如下模型一位講師帶多名學(xué)生的課程,一位學(xué)生聽多名講師的課程,在此,講師與學(xué)生形成了多對多的映射關(guān)系一位用戶有多個(gè)角色,一個(gè)角色有多個(gè)用戶,用戶與角色形成了多對多的關(guān)系此時(shí)需要添加中間關(guān)系表來描述上述現(xiàn)象講師表 關(guān)系表 學(xué)生表Hibernate中使用多對多的關(guān)系映射描述上述現(xiàn)象編號(hào)姓名昵稱1李若亮Jock2張三豐祖師編號(hào)tea_idStu_id121212編號(hào)姓名班級(jí)1張翠山武當(dāng)2張三Java北京傳智播客教育 多對多數(shù)據(jù)庫表(左方)創(chuàng)建教師表,用于描述多對多關(guān)系中的左方北京傳智播客教
2、育 多對多數(shù)據(jù)庫表(右方)創(chuàng)建學(xué)生表,用于描述多對多關(guān)系中的右方北京傳智播客教育 多對多數(shù)據(jù)庫表(關(guān)系表)創(chuàng)建關(guān)系表,用于描述多對多關(guān)系中的關(guān)系表北京傳智播客教育 多對多模型(左方)創(chuàng)建教師類,用于描述多對多中的左方,并在類中描述一個(gè)老師對應(yīng)多個(gè)學(xué)生的關(guān)系由于學(xué)生信息不能重復(fù),因此使用Set集合進(jìn)行描述Set集合初始化為任意Set模型集合,推薦使用HashSet北京傳智播客教育 多對多模型(右方)創(chuàng)建學(xué)生類,用于描述多對多中的右方,并在類中描述一個(gè)學(xué)生對應(yīng)多個(gè)老師的關(guān)系由于教師信息不能重復(fù),因此使用Set集合進(jìn)行描述Set集合初始化為任意Set模型集合,推薦使用HashSet北京傳智播客教育
3、多對多配置關(guān)系(左方)創(chuàng)建學(xué)生模型配置文件TeacherModel.hbm.xml,用于描述多對多中的左方,并在配置中添加對應(yīng)關(guān)系多對多關(guān)系中左方需要在配置文件中描述多對多的關(guān)系北京傳智播客教育 多對多配置關(guān)系(右方)創(chuàng)建學(xué)生模型配置文件StudentModel.hbm.xml ,用于描述多對多中的左方,并在配置中添加對應(yīng)關(guān)系多對多關(guān)系中左方需要在配置文件中描述多對多的關(guān)系北京傳智播客教育 多對多配置關(guān)系(屬性)在class配置中設(shè)置多對多的關(guān)系 模型中的集合名稱關(guān)系表表名關(guān)系表中模型外鍵關(guān)聯(lián)模型類名關(guān)系表中關(guān)聯(lián)模型外鍵本方關(guān)聯(lián)方北京傳智播客教育 多對多關(guān)系資源注冊最后將兩個(gè)資源文件全部注冊到
4、系統(tǒng)配置中多對多關(guān)系配置完成北京傳智播客教育 基于多對多映射關(guān)系的操作(單增)單獨(dú)添加數(shù)據(jù)與多對多映射沒有任何關(guān)系,屬于Hibernate的基本操作北京傳智播客教育 基于多對多映射關(guān)系的操作(同增)同時(shí)添加,需要先指定對象間的關(guān)系首先關(guān)聯(lián)多對多的關(guān)系sm.getTeachers().add(tm);tm.getStudents().add(sm);添加對應(yīng)的記錄s.save(sm);s.save(tm);此時(shí)會(huì)在關(guān)系表中創(chuàng)建兩個(gè)關(guān)聯(lián)關(guān)系,原因就是兩個(gè)對象都進(jìn)行了關(guān)系維護(hù),也就是在添加sm與tm時(shí),分別對關(guān)系進(jìn)行了維護(hù)操作北京傳智播客教育 基于多對多映射關(guān)系的操作(同增)在進(jìn)行多對多的同時(shí)添加時(shí)
5、,由于不存在明確的A到B的關(guān)系和B到A的關(guān)系,因此無法確認(rèn)明確的主從方此時(shí),通常根據(jù)業(yè)務(wù)來確定主從方。此業(yè)務(wù)中,通常設(shè)定學(xué)生方為主方,教師方為從方。上述問題解決方案,使從方不具備關(guān)系維護(hù)能力斷開從方的關(guān)系維護(hù),為從方添加inverse=“true”北京傳智播客教育 基于多對多映射關(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ù)了北京傳智播客教育 基于多對多映射關(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);北京傳智播客教育 基于多對多映射關(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);斷開原始的關(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)行修改操作,而是先斷開AB之間的關(guān)系,然后建立AC之間的關(guān)系,因此執(zhí)行的應(yīng)該是刪除與添加操作,不是修改操作北京傳智播客教育 基于多對多映射關(guān)系的操作(單刪)單獨(dú)刪除指刪除多對多中任意一方實(shí)體,同時(shí)將實(shí)體對應(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í)出問題,給從方重新分配關(guān)系維護(hù)權(quán)利北京傳智播客教育 基于多對多映射關(guān)系的操作(單刪)解除了關(guān)系維護(hù)限制后,從方也可以進(jìn)行單獨(dú)刪除,并將關(guān)系清除。此時(shí)也就沒有主從雙方劃分總結(jié):對于多對多關(guān)系中,如果
10、明確主從雙方,也就是為從方設(shè)置放棄關(guān)系維護(hù)inverse=“true” ,那么單獨(dú)刪除要從主方發(fā)起,從方不能發(fā)起(主流)對于多對多關(guān)系中,如果不明確主從雙方,也就是都不設(shè)置inverse=“true” ,那么單獨(dú)刪除可以從任何一方發(fā)起,但是添加時(shí)的關(guān)系維護(hù)只能由一方發(fā)起,不能雙方都發(fā)起,否則會(huì)出現(xiàn)關(guān)系數(shù)據(jù)重復(fù)現(xiàn)象(非主流)北京傳智播客教育 基于多對多映射關(guān)系的操作(級(jí)聯(lián)刪除)多對多關(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 軟件評(píng)測師考試技巧總結(jié)與試題及答案
- 滑雪段位測試題及答案大全
- 中級(jí)社會(huì)工作者考試反思與自省指南試題及答案
- 破解難題2025年網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)師考試的解析方法及試題及答案
- 綜合部項(xiàng)目管理制度
- 人事科室管理制度
- 水務(wù)工程運(yùn)維管理制度
- 教師培訓(xùn)研修管理制度
- 建管處合同管理制度
- 美容實(shí)訓(xùn)室管理制度
- 2020年《科學(xué)通史》期末復(fù)習(xí)完整考試題庫208題(含答案)
- 2023-2024學(xué)年貴州省遵義市仁懷市年小升初總復(fù)習(xí)語文測試卷含答案
- 大學(xué)生職業(yè)生涯規(guī)劃與就業(yè)指導(dǎo)智慧樹知到期末考試答案2024年
- (完整版)保證藥品信息來源合法、真實(shí)、安全的管理措施、情況說明及相關(guān)證明
- 2017-2022年近六年浙江高考英語普通高等學(xué)校招生全國統(tǒng)一考試(浙江卷)
- 五苓散的經(jīng)典解讀與應(yīng)用
- 工貿(mào)企業(yè)安全生產(chǎn)標(biāo)準(zhǔn)化定級(jí)評(píng)分標(biāo)準(zhǔn)
- 管理理論論文(5篇)
- 關(guān)于幼兒園建設(shè)實(shí)施方案范文
- 統(tǒng)編教材小學(xué)生詩詞大賽題庫(各種題型)及答案
- 《軍事理論與國家安全》參考試題庫(含答案)
評(píng)論
0/150
提交評(píng)論