




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
北京傳智播客教育Hibernate關(guān)聯(lián)關(guān)系映射趙慶軒北京傳智播客教育數(shù)據(jù)庫表之間關(guān)系映射數(shù)據(jù)庫采用外鍵來描述數(shù)據(jù)表之間的關(guān)系一對多:客戶和訂單的關(guān)系創(chuàng)建customers、orders數(shù)據(jù)表在多方添加一方的外鍵(在orders表添加customer_id)一對一:公司和公司收信地址關(guān)系創(chuàng)建company和address數(shù)據(jù)表在任意一方添加對方的主鍵作為外鍵多對多:訂單和商品的關(guān)系創(chuàng)建orders和products數(shù)據(jù)表必須創(chuàng)建第三張關(guān)系表,分別引入雙方的主鍵作為外鍵北京傳智播客教育系統(tǒng)設(shè)計(jì)中三種實(shí)體關(guān)系北京傳智播客教育Hibernate關(guān)聯(lián)關(guān)系映射Hibernate是采用Java對象關(guān)系來描述數(shù)據(jù)表之間的關(guān)系北京傳智播客教育Hibernate關(guān)聯(lián)關(guān)系映射一對多關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)一對多一對一關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)一對一多對多關(guān)聯(lián)關(guān)系雙向關(guān)聯(lián)多對多北京傳智播客教育一對多關(guān)聯(lián)關(guān)系映射趙慶軒北京傳智播客教育建立一對多關(guān)系映射客戶和訂單是典型的一對多關(guān)聯(lián)關(guān)系在多方添加對一方關(guān)聯(lián)北京傳智播客教育建立多對一關(guān)系映射在Order.hbm.xml中配置<many-to-one><many-to-onename="customer" class="cn.itcast.one2many.Customer"
column="customer_id"></many-to-one>name:設(shè)定待映射的持久化類的名字。column:設(shè)定和持久化類的屬性對應(yīng)的表的外鍵。class:設(shè)定持久化類的屬性的類型。北京傳智播客教育建立一對多關(guān)系映射仍然采用客戶和訂單系統(tǒng)在一方添加多方集合對象北京傳智播客教育建立一對多關(guān)系映射在Customer.hbm.xml添加<set>元素<setname="orders">
<keycolumn="customer_id"></key>
<one-to-manyclass="cn.itcast.one2many.Order"/></set>name:設(shè)定Customer中集合類型屬性名稱<keycolumn>:設(shè)置生成數(shù)據(jù)表中外鍵字段名稱<one-to-many>:設(shè)置一對多映射關(guān)系class:設(shè)置映射關(guān)聯(lián)目標(biāo)PO類北京傳智播客教育一對多保存操作建立雙向關(guān)聯(lián),保存客戶同時保存訂單只執(zhí)行session.save(customer);或session.save(order);???北京傳智播客教育一對多保存操作---級聯(lián)保存采用級聯(lián)保存操作cascade="save-update"北京傳智播客教育一對多保存操作---級聯(lián)保存測試保存Customer對象,將瞬時的Order對象關(guān)聯(lián)到持久Customer對象北京傳智播客教育一對多保存操作---對象導(dǎo)航1、order1關(guān)聯(lián)到customer而customer沒有關(guān)聯(lián)到order12、customer關(guān)聯(lián)到order2order3而order2order3沒有關(guān)聯(lián)到customer問題session.save(order1)插入幾條記錄----4session.save(customer)插入幾條記錄----3session.save(order2)插入幾條記錄-----1對象導(dǎo)航在配置文件中需要配置2端cascade="save-update"北京傳智播客教育一對多刪除操作---級聯(lián)刪除采用級聯(lián)刪除操作cascade="delete"訂單刪除了?客戶信息還在嗎北京傳智播客教育一對多刪除操作---級聯(lián)刪除刪除客戶數(shù)據(jù)時,訂單數(shù)據(jù)是否刪除北京傳智播客教育一對多刪除操作---級聯(lián)刪除從查詢的客戶對象中移除訂單對象,訂單對象是否刪除?北京傳智播客教育cascade屬性值北京傳智播客教育雙向維護(hù)---多余的SQL更改訂單表id=6的customer_id=3更改為4上面的代碼為什么產(chǎn)生兩條update語句?如何產(chǎn)生一條語句呢,完成上面的功能呢?Hibernate:updateorderssetorder_number=?,price=?,customer_id=?whereid=?Hibernate:updateorderssetcustomer_id=?whereid=?
變更客戶北京傳智播客教育設(shè)置inverse屬性---單向維護(hù)通過inverse屬性來設(shè)置由雙向關(guān)聯(lián)的哪一方來維護(hù)表和表之間的關(guān)系.inverse=false的為主動方,inverse=true的為被動方,由主動方負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系在one一方設(shè)置inverse=true,由集合端管理關(guān)系訂單能存入數(shù)據(jù)庫嗎?北京傳智播客教育一對多關(guān)聯(lián)中的父子關(guān)系理解什么是父子關(guān)系所謂父子關(guān)系:是指父方來控制子方的持久化生命周期,子方對象必須和一個父方對象關(guān)聯(lián)。只有在一對多關(guān)系中才存在父子關(guān)系Customer(父方)Order(子方)北京傳智播客教育一對多關(guān)聯(lián)中的父子關(guān)系解除關(guān)聯(lián)關(guān)系---父子關(guān)系當(dāng)customer.hbm.xml的<set>元素的cascade屬性取值為all-delete-orphan,Hibernate會按照如下方式處理customer對象:1.當(dāng)保存或更新customer對象時,級聯(lián)保存或更新所有關(guān)聯(lián)的order對象,相當(dāng)于save-update.2.當(dāng)刪除customer對象時,級聯(lián)刪除所有的order對象,相當(dāng)于delete。3.解除訂單和客戶關(guān)聯(lián),刪除訂單,相當(dāng)于delete-orphan北京傳智播客教育一對一關(guān)聯(lián)關(guān)系映射北京傳智播客教育映射一對一外鍵雙向關(guān)聯(lián)一對一關(guān)聯(lián)指兩個表之間的記錄是一一對應(yīng)的關(guān)系。分為兩種:外鍵關(guān)聯(lián)和主鍵關(guān)聯(lián)。比如一家公司(Company)和它所在的地址(Address)。在業(yè)務(wù)邏輯中要求一家公司只有唯一的地址,一個地址也只有一家公司。下圖表現(xiàn)為外鍵關(guān)聯(lián)關(guān)系。fkpk北京傳智播客教育映射一對一外鍵雙向關(guān)聯(lián)對于基于外鍵的1-1關(guān)聯(lián),其外鍵可以存放在任意一邊,在需要存放外鍵一端,增加many-to-one元素。為many-to-one元素增加unique=“true”屬性來表示為1-1關(guān)聯(lián),并用name屬性來指定關(guān)聯(lián)屬性的屬性名另一端需要使用one-to-one元素,該元素使用property-ref
屬性指定使用被關(guān)聯(lián)實(shí)體主鍵以外的字段作為關(guān)聯(lián)字段北京傳智播客教育映射一對一外鍵雙向關(guān)聯(lián)北京傳智播客教育映射一對一外鍵雙向關(guān)聯(lián)publicvoidinsert(){Sessionsession=sessionFacoty.openSession();Transactiontx=session.beginTransaction();Companycompany=newCompany();company.setName("傳智播客");Addressaddress=newAddress();address.setCity("北京");address.setCountry("中國");company.setAddress(address);address.setCompany(company);session.save(address);session.save(company);mit();session.close();}測試保存北京傳智播客教育映射一對一外鍵雙向關(guān)聯(lián)publicvoidinsertUnique(){Sessionsession=sessionFacoty.openSession();Transactiontx=session.beginTransaction();//創(chuàng)建公司Companycompany=newCompany();company.setName("寶鋼");//查詢地址Addressaddress=(Address)session.load(Address.class,1);//建立雙向關(guān)聯(lián)company.setAddress(address);address.setCompany(company);//保存公司session.save(company);mit();session.close();}測試唯一性(報(bào)錯)北京傳智播客教育映射一對一主鍵雙向關(guān)聯(lián)一對一的另一種解決方式就是主鍵關(guān)聯(lián),在這種關(guān)聯(lián)關(guān)系中,要求兩個對象的主鍵必須保持一致,通過兩個表的主鍵建立關(guān)聯(lián)關(guān)系,無須外鍵參與。北京傳智播客教育映射一對一主鍵雙向關(guān)聯(lián)基于主鍵的映射策略:指一端的主鍵生成器使用foreign策略,表明根據(jù)”對方”的主鍵來生成自己的主鍵,自己并不能獨(dú)立生成主鍵.<param>子元素指定使用當(dāng)前持久化類的那個屬性作為“對方”采用foreign主鍵生成器策略的一端增加one-to-one元素映射關(guān)聯(lián)屬性,其one-to-one屬性還應(yīng)增加constrained=“true”
屬性;另一端(company)增加one-to-one元素映射關(guān)聯(lián)屬性。constrained(約束):指定為當(dāng)前持久化類對應(yīng)的數(shù)據(jù)庫表的主鍵添加一個外鍵約束,引用被關(guān)聯(lián)的對象(“對方”)所對應(yīng)的數(shù)據(jù)庫表主鍵北京傳智播客教育映射一對一主鍵雙向關(guān)聯(lián)北京傳智播客教育映射一對一主鍵雙向關(guān)聯(lián)publicvoidinsert(){Sessionsession=sessionFacoty.openSession();Transactiontx=session.beginTransaction();Companycompany=newCompany();company.setName("傳智播客");Addressaddress=newAddress();address.setCity("北京");address.setCountry("中國");company.setAddress(address);address.setCompany(company);session.save(address);session.save(company);mit();session.close();}測試保存北京傳智播客教育多對多關(guān)聯(lián)關(guān)系映射北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系多對多的實(shí)體關(guān)系模型也是很常見的,比如學(xué)生和課程的關(guān)系。一個學(xué)生可以選修多門課程,一個課程可以被多名學(xué)生選修。在關(guān)系型數(shù)據(jù)庫中對于多對多關(guān)聯(lián)關(guān)系的處理一般采用中間表的形式,將多對多的關(guān)系轉(zhuǎn)化成兩個一對多的關(guān)系。
北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系雙向n-n關(guān)聯(lián)需要兩端都使用集合屬性雙向n-n關(guān)聯(lián)必須使用中間表集合屬性應(yīng)增加key子元素用以映射外鍵列,集合元素里還應(yīng)增加many-to-many子元素關(guān)聯(lián)實(shí)體類在雙向n-n關(guān)聯(lián)的兩邊都需指定連接表的表名及外鍵列的列名.兩個集合元素set的table元素的值必須指定,而且必須相同。北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系set元素的兩個子元素:key和many-to-many都必須指定column屬性其中,key和many-to-many分別指定本持久化類和關(guān)聯(lián)類在連接表中的外鍵列名兩邊的key與many-to-many的column屬性交叉相同。也就是說,一邊的set元素的key的cloumn值為a,many-to-many的column為b;則另一邊的set元素的key的column值b,many-to-many的column值為a北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系public
voidsaveMany2Many(){Coursec1=newCourse("語文");Coursec2=newCourse("數(shù)學(xué)");Students1=newStudent("張飛");Students2=newStudent("關(guān)羽");s1.getCourses().add(c1);s1.getCourses().add(c2);s2.getCourses().add(c1);s2.getCourses().add(c2);session.save(s1);session.save(s2);session.save(c1);session.save(c2);}
測試保存北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系publicvoidremoveMany2Many(){Sessionsession=sessionFacoty.openSession();Transactiontx=session.beginTransaction();Students=(Student)session.load(Student.class,1);Coursec=(Course)session.load(Course.class,1);s.getCourses().remove(c);c.getStus().remove(s);mit();session.close();}以上代碼會產(chǎn)生delete語句,刪除中間表的數(shù)據(jù)deletefromstudent_coursewherecid=?andsid=?
解除1號學(xué)生和1號課程的關(guān)聯(lián)關(guān)系北京傳智播客教育映射多對多雙向關(guān)聯(lián)關(guān)系Sessionsession=sessionFacoty.openSession();Transactiontx=session.beginTransaction();Students1=(Student)session.load(Student.class,1);Coursec1=(Course)session.load(Course.class,1);Coursec2=(Course)session.load(Course.class,2);//解除1號學(xué)生和2號課程的關(guān)聯(lián)關(guān)系s1.getCourses().remove(c2);c2.getStus().remove(s1);//設(shè)置1號學(xué)生和1號課程的關(guān)聯(lián)關(guān)系s1.getCourses().add(c1);c1.getStus().add(s1);mit();session.close();//以上代碼先在中間表插入11再刪除12(注意:不是update操作)
insertintostudent_course(cid,sid)values(?,?)deletefromstudent_coursewherecid=?andsid=?改變1號學(xué)生和2號課程的關(guān)聯(lián)關(guān)系,改為1號學(xué)生和1號課程北京傳智播客教育映
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷庫買賣拆除合同范本
- 剪力墻和伸縮縫施工方案
- 亞馬遜推廣服務(wù)合同范本
- 分包電氣合同范本
- 第七章各具特色的地區(qū)教學(xué)設(shè)計(jì)2023-2024學(xué)年商務(wù)星球版地理七年級下冊
- 中英文演出合同范本
- 農(nóng)作物安全生產(chǎn)合同范本
- 加盟燕窩店合同范例
- 加工面店轉(zhuǎn)讓合同范本
- 出口篷布采購合同范本
- 2015-2022年青島酒店管理職業(yè)技術(shù)學(xué)院高職單招語文/數(shù)學(xué)/英語筆試參考題庫含答案解析
- 保險第三方理賠調(diào)查服務(wù)方案
- 我愛運(yùn)動手抄報(bào)電子小報(bào)模板(附A4線稿)可打印涂色
- 新能源汽車結(jié)構(gòu)原理與檢修(彩色版)課件
- GB/T 9113-2010整體鋼制管法蘭
- GB/T 32722-2016土壤質(zhì)量土壤樣品長期和短期保存指南
- 2009數(shù)據(jù)結(jié)構(gòu)英文試卷A及答案
- FZ/T 51010-2014纖維級聚對苯二甲酸1,3-丙二醇酯切片(PTT)
- 中等職業(yè)學(xué)校英語教學(xué)大綱詞匯表本表共收詞2200個左右含
- 三年級下冊道德與法治《我是獨(dú)特的》教學(xué)課件【新部編版】
- “互聯(lián)網(wǎng)+”大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)課件
評論
0/150
提交評論