09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第1頁(yè)
09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第2頁(yè)
09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第3頁(yè)
09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第4頁(yè)
09hibernate多對(duì)關(guān)聯(lián)關(guān)系映射_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論