學(xué)生 和 課程就是一種多對(duì)多的關(guān)系映射,那么再hibernate中,對(duì)于多對(duì)多關(guān)系在怎么配置?
和一些注意的事項(xiàng)?簡(jiǎn)單測(cè)試下。
建表
實(shí)體
配置文件和映射
測(cè)試
1。使用oracle ,建表sql
create table students( id number(7) primary key, name nvarchar2(20), age number(2) ) create table course( id number(7) primary key, name nvarchar2(20), time nvarchar2(20) ) create table st_cou( st_id references students(id), cou_id references course(id), primary key (st_id,cou_id) )2. students 實(shí)體
package com.hibernate.entity; import java.util.HashSet; import java.util.Set; public class Students { private Integer id; private String name; private Integer age; private Set3. course實(shí)體
package com.hibernate.entity; import java.util.HashSet; import java.util.Set; public class Course { private Integer id; private String name; private String time; private Set4.hibernate.cfg.xml 配置
course.hbm.xmc 映射配置
5. 測(cè)試
查詢(xún)和更新測(cè)試略
查詢(xún)直接查就可以了,更新查詢(xún)后,修改值后,更新就可以了。
插入測(cè)試,級(jí)聯(lián)插入
@Test public void inset(){ Session session = HibUtil.getSession(); Transaction tx = session.beginTransaction(); Course course = new Course(null, "地理", "面貌"); Students students = new Students(null, "蛋蛋", 18); students.getCourse().add(course); // course.getStudents().add(students);這句不用寫(xiě) session.save(students); tx.commit(); }多對(duì)多中,插入,只要乙方進(jìn)行維護(hù)就可以,如果二方都寫(xiě)
students.getCourse().add(course); course.getStudents().add(students);那么插入中,再關(guān)聯(lián)表中,由于乙方已經(jīng)維護(hù),此時(shí)已經(jīng)存在關(guān)聯(lián)關(guān)系,這時(shí)候,另一方已進(jìn)行維護(hù)
那么由于已經(jīng)存在關(guān)聯(lián)關(guān)系,這時(shí)候會(huì)報(bào) 違反唯一約束條件
刪除測(cè)試
@Test public void delete(){ Session session = HibUtil.getSession(); Transaction tx = session.beginTransaction(); Students students = (Students)session.get(Students.class, 1); session.delete(students); tx.commit(); }執(zhí)行之后,進(jìn)入數(shù)據(jù)庫(kù)查詢(xún),發(fā)現(xiàn),只要是在關(guān)聯(lián)表中存在的,相關(guān)學(xué)生和課程都會(huì)被刪除。
配置中,我們配置了級(jí)聯(lián)級(jí)別是 all 這中權(quán)限過(guò)大,慎用。級(jí)聯(lián)級(jí)別修改為 save-update
6.注意
1.實(shí)體中 我們寫(xiě)關(guān)系一方有
private Set
為什么 new HashSet
當(dāng)我們進(jìn)行單個(gè)插入表時(shí),如果沒(méi)有new HashSet
2. 級(jí)聯(lián)關(guān)系
在關(guān)聯(lián)關(guān)系中,要慎用關(guān)系,以免對(duì)另一方數(shù)據(jù)操作損失。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。