![Java-EE輕量級(jí)框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第1頁(yè)](http://file4.renrendoc.com/view/0c586a813c7d76ce9ae7fb5362270ec1/0c586a813c7d76ce9ae7fb5362270ec11.gif)
![Java-EE輕量級(jí)框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第2頁(yè)](http://file4.renrendoc.com/view/0c586a813c7d76ce9ae7fb5362270ec1/0c586a813c7d76ce9ae7fb5362270ec12.gif)
![Java-EE輕量級(jí)框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第3頁(yè)](http://file4.renrendoc.com/view/0c586a813c7d76ce9ae7fb5362270ec1/0c586a813c7d76ce9ae7fb5362270ec13.gif)
![Java-EE輕量級(jí)框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第4頁(yè)](http://file4.renrendoc.com/view/0c586a813c7d76ce9ae7fb5362270ec1/0c586a813c7d76ce9ae7fb5362270ec14.gif)
![Java-EE輕量級(jí)框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第5頁(yè)](http://file4.renrendoc.com/view/0c586a813c7d76ce9ae7fb5362270ec1/0c586a813c7d76ce9ae7fb5362270ec15.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java-EE輕量級(jí)框架應(yīng)用開發(fā)第6章-
Hibernate的關(guān)聯(lián)映射本章要點(diǎn)·多對(duì)一映射·一對(duì)多映射·一對(duì)一映射·多對(duì)多映射·雙向映射·Hibernate的主要目的就是Java程序員可以隨心所欲的使用對(duì)象編程思維來(lái)操縱數(shù)據(jù)庫(kù)一些數(shù)據(jù)庫(kù)表的關(guān)系應(yīng)該可以通過(guò)hibernate實(shí)現(xiàn),比方在數(shù)據(jù)庫(kù)中常用到的主外鍵關(guān)系;還有一些跟主外鍵有關(guān)的設(shè)置,比方主鍵的信息被刪除,外鍵關(guān)聯(lián)的信息也要?jiǎng)h除等等如果把表抽象為實(shí)體類,這些關(guān)系可以抽象為實(shí)體類之間的一對(duì)一、多對(duì)一、一對(duì)多、多對(duì)多等關(guān)系。在Hibernate正確的配置這些關(guān)系以后,
Hibernate能夠處理這些復(fù)雜的關(guān)系,提高了開發(fā)的效率多對(duì)一映射配置如果規(guī)定一個(gè)客戶〔Customer〕可以建立多個(gè)訂單〔
Order〕,一個(gè)訂單只屬于一個(gè)顧客,這就是一個(gè)多對(duì)一關(guān)聯(lián)從Order到Customer的多對(duì)一單向關(guān)聯(lián)需要在Order類中定義一個(gè)Customer屬性,而在Customer類中無(wú)需定義存放Order對(duì)象的集合屬性關(guān)系數(shù)據(jù)模型Order表中的customer_id參照customer表的主鍵id·通過(guò)在映射文件中的many-to-one元素,可以定義持久化類間的多對(duì)一的關(guān)聯(lián),這種關(guān)系模型實(shí)際上是一個(gè)對(duì)象引用<many-to-one①②③④⑥⑥name="propertyName"column="column_name"class="ClassName"cascade="all|none|save-update|delete"outer-join="true|false|auto"update="true|false"insert="true|false"property-ref="propertyNameFromAssociatedClass"access="field|property|ClassName"⑦⑧/>說(shuō)明①name:屬性名②column〔可選〕:字段名③class〔可選,默認(rèn)是通過(guò)反射得到屬性類型〕:關(guān)聯(lián)的類的名字④cascade〔級(jí)聯(lián)〕〔可選〕:指明哪些操作會(huì)從父對(duì)象級(jí)聯(lián)到關(guān)聯(lián)的對(duì)象,cascade屬性允許以下值none::在保存,更新或刪除當(dāng)前對(duì)象時(shí),忽略其他關(guān)聯(lián)的對(duì)象,它是cascade屬性的默認(rèn)值save-update:當(dāng)通過(guò)Session的save(),update()以及
saveOrUpdate()方法來(lái)保存或更新當(dāng)時(shí)對(duì)象時(shí),級(jí)聯(lián)保存所有關(guān)聯(lián)的新建的臨時(shí)對(duì)象,并且級(jí)聯(lián)更新所有關(guān)聯(lián)的游離對(duì)象delete:當(dāng)通過(guò)Session的delete()方法刪除當(dāng)前對(duì)象時(shí),級(jí)聯(lián)刪除所有關(guān)聯(lián)的對(duì)象all:包含save-update以及delete的行為.此外,對(duì)當(dāng)前對(duì)象執(zhí)行
outer-join〔外連接〕〔可選,默認(rèn)為自動(dòng)〕:當(dāng)設(shè)置
hibernate.use_outer_join時(shí),對(duì)這個(gè)關(guān)聯(lián)允許外連接抓取。outer-join參數(shù)允以下3個(gè)不同值auto〔默認(rèn)〕:如果被關(guān)聯(lián)的對(duì)象沒(méi)有代理〔Proxy〕,使用外連接抓取關(guān)聯(lián)〔對(duì)象〕true:一直使用外連接來(lái)抓取關(guān)聯(lián)false:永遠(yuǎn)不使用外連接來(lái)抓取關(guān)聯(lián)⑥update、insert〔可選,默認(rèn)為true〕:指定對(duì)應(yīng)的字段是否在用于
UPDATE和/或INSERT的SQL語(yǔ)句中包含。如果二者都是false,那么這是一
個(gè)純粹的“衍生〔Derived〕〞關(guān)聯(lián),它的值是通過(guò)映射到同一個(gè)〔或多個(gè)〕字段的某些其他屬性得到的,或者通過(guò)Trigger〔觸發(fā)器〕,或者其他程序
⑦property-ref:〔可選〕:指定關(guān)聯(lián)類的一個(gè)屬性,這個(gè)屬性將會(huì)和本外鍵相對(duì)應(yīng)。如果沒(méi)有指定,會(huì)使用對(duì)方關(guān)聯(lián)類的主鍵⑧access〔可選,默認(rèn)是property〕:Hibernate用來(lái)訪問(wèn)屬性的策略Hibernate設(shè)置多對(duì)一關(guān)聯(lián)·以O(shè)rder和Customer之間的多對(duì)一關(guān)聯(lián)為例·
Customer.java·
Order.javaprivate
String
name;return
id;}this.id
=
id;return
name;public
void
setName(String
name)
{
=
name;}public
class
Order
{private
Integer
id;private
String
orderNumber;private
Double
price;private
Customer
customer;//增加了“1〞方的對(duì)象為自己的屬性public
Inte
er
getId()
{publpiucblcilcasvsoiCdusteotmIedr(I{nteger
id)
{privtahties.Iindte=giedr;id;}public
String
getOrdepruNbulmibcerI(n)te{ger
getId()
{publtihcisv.ooirddseertNIudm(bIenrt=egoerrdeirdN)u{mber;}publriectuSrtnripnrgicge;tName()
{}}public
Cu}stomer
getCustomer()
{return
customer;}public
void
setCustomer(Customer
customer)
{this.customer
=
customer;}}<hibernate-mapping><class
name="entirteyt.uOrndeird";
table="Order
">}<generator
class="increment"
/></id><colurmentunranmeo=r"doerdNeurm_bnearm;e"
length="20"></column></p}roperty><!--manpyu-btloi-conveo關(guān)id聯(lián)se-t-O>rderNumber(String
orderNumber){<many-to-one
name="customer"column="customer_id"
class="entity.Customer"not-null="true">
public
Do}uble
getPrice()
{</many-to-one></clapsusb>lic
vo}id
setPrice(Double
price)
{</hibernate-mappingt>his.price
=
price;測(cè)試多對(duì)一映射·先保存訂單,再保存客戶public
void
insert(){·
運(yùn)行后在控制Se臺(tái)ssi下on
se會(huì)ssi輸on=s出essi以onFa下cto語(yǔ)ry.o句penSession();Transaction
transaction=session.beginTransaction();Customer
customer=new
Customer();Hibernate:insert
into
scustomer.sredrO.poh (ectuNsatmoem(e"r張_i三d,"o)r;derNumber,price)values(?,?,?)Hibernate:
insert
into
shop.rucedrO Osrtdoemre=rn(nawe
Omred)evalues;)(r (?)Order.setOrderNumber("0001");Hibernate:update
shop.O/r/d關(guān)er聯(lián)se訂t
單cu和st客ome戶r_id=?,orderNumber=?,price=?where
id=?Order.setCustomer(customer);//保存訂單
session.save(Order);//保存客戶session.save(customer);transaction
mit();session.close();}·先保存客戶,再保存訂單public
void
insert(){Order
Order=new
Order();Order.setOrderNumber("001");//關(guān)聯(lián)訂單和客戶Order.setCustomer(customer);//保存客戶
session.save(customer);//保存訂單session.save(Order);transaction
mit();session.close();}·
運(yùn)行后在控S制essi臺(tái)on
s下essi會(huì)on=輸sess出ionF以acto下ry.語(yǔ)open句Session();Transaction
transaction=session.beginTransaction();Hibernate:
insert
into
shCuosp.tcoumsetrocmuesrt(omnearm=en)evwaClusetso(m?e)r();Hibernate:insert
into
schuospt.oOmredre.rs(ectuNsatmoem(e"r張_i三d,"o)r;derNumber,price)values(?,?,?)·保存訂單,不保存客戶·在代碼中注釋掉session.save(customer),只保存訂單,不保存客戶public
void
insert(){·
運(yùn)行后在控S制essi臺(tái)on
s下essi會(huì)on=s輸essi出onF以acto下ry.o語(yǔ)penS句ess,io可n();以看到HibernateTransaction
transaction=session.beginTransaction();對(duì)這次數(shù)據(jù)操Cus作tome的r
cu執(zhí)stom行er=n流ew
C程ustomer();customer.setName("張三");//關(guān)聯(lián)訂單和客戶//保存客戶·當(dāng)hibernatOerd持er.s久etOr化derN一umb個(gè)er("臨o_00時(shí)1");對(duì)象時(shí),在默認(rèn)情況下,它不會(huì)自動(dòng)持久Ord化er.s所etCu關(guān)sto聯(lián)mer(的cust其omer他);臨時(shí)對(duì)象,會(huì)拋出
TransientOb/j/seescsitonE.sxavcee(cpusttoimeor)n;//保存訂單session.save(Order);transaction
mit();session.close();}Hibernate:
insert
into
shOorpd.eOrrOdredre(rc=unsetwoOmredre_ri(d),;orderNumber,
price)
values
(?,
?,
?)·如果設(shè)定many-to-one元素的cascade屬性為save-update的話,可實(shí)現(xiàn)自動(dòng)持久化所關(guān)聯(lián)的對(duì)象,對(duì)剛剛order的映射文件里的many-to-one進(jìn)行修改·再次運(yùn)行前面的代碼,運(yùn)行后在控制臺(tái)下會(huì)輸出以下語(yǔ)句<many-to-one
name="customer"
column="CUSTOMER_ID"
class="entity.Customer"
not-null="true"
cascade="save-update"></many-to-one>Hibernate:
insert
into
shop.customer
(name)
values
(?)·H可iber以nate:看inse到rt
i這nto
s次hop.O會(huì)rder自(cus動(dòng)tome執(zhí)r_id,行orde了rNum保ber,存pricce)uvasluteso(?m,?e,r?)的操作·多對(duì)一映射·一對(duì)多映射·一對(duì)一映射·多對(duì)多映射·雙向映射一對(duì)多映射配置·
Hibernate提供了一對(duì)多關(guān)系的標(biāo)簽<one-to-many>,一對(duì)多是在一的一端維護(hù)多的一端·
一對(duì)多關(guān)系的對(duì)象模型在日常生活中也經(jīng)??吹剑粋€(gè)客戶〔Customer〕可以有多張訂單〔Order〕,所以客戶和訂單的關(guān)系也是一對(duì)多的關(guān)系·
在進(jìn)行關(guān)系映射時(shí)需要在一的一端添加對(duì)應(yīng)的set屬性,并在它的配置文件中添加set標(biāo)簽,在set標(biāo)簽中配置相應(yīng)的<one-to-many>標(biāo)簽在Hibernate設(shè)置一對(duì)多關(guān)聯(lián)set屬性,但是只是說(shuō)明了延性配置對(duì)應(yīng)的對(duì)象,屬return
Order;·以O(shè)rder和Customer之間的一對(duì)多關(guān)聯(lián)為例<phuibleircncaltaes-smaCpupsitnogm>er
{·<claCsus
nsamtper=oi"vmeanteteirtIyn..tCejugseatrovimdea;r"
table="customer"
catalog="demotest">private
String
name;<generpartiovratcelaSsest=O"ridnecr;ement"
/></?id>Customerpu對(duì)bli象c
Set中g(shù)et使Orde用r()了{(lán)遲<}加colu載mn
n的ame=屬"nam性e"l,engt并h="2沒(méi)0">有</co為lumn屬></properptuyb>lic
void
setOrder(Set
Order)
{<set性nam的e="O對(duì)rder象es"t是ihnivse.要rOsred=在e"rt=r映uOer"d>e射r;文件中來(lái)配置的,需要添加set<key>}<標(biāo)colp簽umbnlin,camIen并=t"ecgue在srtgoemsteIred_(it)d標(biāo)"{/>簽中添加<one-to-many>標(biāo)簽</key>
return
id;<one-t}o-many
class="entity.Order"
/></set>
public
void
setId(Integer
id)
{</class>
this.id
=
id;</hibernate-}mapping>public
String
getName()
{return
name;}public
void
setName(String
name)
{
=
name;}}測(cè)試多對(duì)一映射·寫入數(shù)據(jù)加Order對(duì)象時(shí)應(yīng)該使用p·ublic寫void入sav數(shù)e(){據(jù)需要注意的是一對(duì)多的關(guān)系,所以在添加的Session
session=sessionFactory.openSession();時(shí)候需要添加Tran多sact個(gè)ionOtrrandsaectri類on=s,essi另on.b外egi由nTra于nsac在tionC()u;stomer中添Order
order1=new
Order();加了對(duì)應(yīng)的soredetr1屬.set性O(shè)rd,erNu所mber以("00在1")添;session.save(order1);HashSet來(lái)添Or加der
,orde這r2=n樣ew
O即rder可();實(shí)現(xiàn)一對(duì)多的關(guān)系order2.setOrderNumber("002");session.save(order2);·
運(yùn)行測(cè)試用Cu例stom,er
c生usto成mer=的new對(duì)Cust應(yīng)omer的();SQL語(yǔ)句customer.setName("張三");
Set
Order=new
HashSet();Order.add(order1);Order.add(order2);customer.setOrderes(Order);session.save(customer);transaction
mit();session.close();}Hibernate:
insert
into
shop.Order
(customer_id,
orderNumber,
price)
values
(?,
?,
?)Hibernate:
insert
into
shop.Order
(customer_id,
orderNumber,
price)
values
(?,
?,
?)Hibernate:
insert
into
shop.customer
(name)
values
(?)·讀取數(shù)據(jù)有加載的對(duì)象都添加不很高public
void
load(){·
寫入Se操ssio作n
se相ssio對(duì)n=s簡(jiǎn)essi單onFa,ctor只y.o需penS要essi把on()所;Transaction
transaction=session.beginTransaction();到Transient/狀/獲態(tài)取主下鍵為,1的運(yùn)客戶行信息相應(yīng)的方法就可以插入內(nèi)容,Customer
customer
=
(Customer)
session.load(Customer.class,1);但是對(duì)/應(yīng)/打的印客讀戶信取息操作就會(huì)稍微復(fù)雜點(diǎn),因?yàn)樾枰@取所有的訂//設(shè)單置訂對(duì)單象集合,,通所過(guò)客以戶這加載種訂單一集合對(duì)多的關(guān)系效率并Set
Order=customer.getOrder();//迭代集合,打印集合中訂單的信息for(Iterator
iter=Order.iterator();iter.hasNext();){·
生成的相}應(yīng)的語(yǔ)句及信息transaction
mit();session.close();H}ibernate:
select
customer0_.id
as
id0_0_,
customer0_.name
as
name0_0_
from
shop.customercustomer0_
where
customer0_.id=?=張三Hibernate:
select
Orderes0_.customer_id
as
customer2_1_,
Orderes0_.id
as
id1_,
Orderes0_.id
as
id1_0_,Orderes0_.customer_id
as
customer2_1_0_,
Orderes0_.orderNumber
as
orderNum3_1_0_,Orderes0_.price
as
price1_0_
from
shop.Order
Orderes0_
where
Orderes0_.customer_id=?order.orderNumber=0001·一對(duì)多的關(guān)系也是經(jīng)常用到的,但是這種關(guān)系在加載時(shí)效率會(huì)不高,因?yàn)樾枰S護(hù)的數(shù)據(jù)較多,所以不建議使用一對(duì)多的關(guān)系,可以考慮多對(duì)一的關(guān)系,這樣在加載時(shí)其實(shí)是一種一對(duì)一的關(guān)系,加載的效率較高,關(guān)系和對(duì)象模型得到了優(yōu)化·多對(duì)一映射·一對(duì)多映射·一對(duì)一映射·多對(duì)多映射·雙向映射一對(duì)一映射配置·如果規(guī)定一個(gè)客戶〔Customer〕只能建立一個(gè)訂單〔Order〕,一個(gè)Order只屬于一個(gè)Customer,這就是一個(gè)一對(duì)一關(guān)聯(lián)從Order到Customer的一對(duì)一單向關(guān)聯(lián)需要在Order類中定義一個(gè)Customer屬性,而在Customer類中無(wú)需定義存放Order對(duì)象的集合屬性關(guān)系數(shù)據(jù)模型Order表中的customer_id參照
customer表的主鍵id·通過(guò)在映射文件中的<one-to-one>元素,可以定義持久化類之間的一對(duì)一的關(guān)聯(lián),這種關(guān)系模型實(shí)際上是一個(gè)對(duì)象引用<one-to-one①②③④name="propertyName"class="ClassName"cascade="all|none|save-update|delete"constrained="true|false"outer-join="true|false|auto"property-ref="propertyNameFromAssociatedClass"access="field|property|ClassName"⑥⑦/>說(shuō)明·
①name:屬性的名字②class〔可選-默認(rèn)是通過(guò)反射得到的屬性類型〕:被關(guān)聯(lián)的類的名字③cascade〔級(jí)聯(lián)〕〔可選〕說(shuō)明操作是否從父對(duì)象級(jí)聯(lián)到被關(guān)聯(lián)的對(duì)象④constrained〔約束〕〔可選〕說(shuō)明該類對(duì)應(yīng)的表對(duì)應(yīng)的數(shù)據(jù)庫(kù)表,和被關(guān)聯(lián)的對(duì)象所對(duì)應(yīng)的數(shù)據(jù)庫(kù)表之間,通過(guò)一個(gè)外鍵引用對(duì)主鍵進(jìn)行約束。這個(gè)選項(xiàng)影響save()和delete()在級(jí)聯(lián)執(zhí)行時(shí)的先后順序
outer-join〔外連接〕〔可選,默認(rèn)為自動(dòng)〕:當(dāng)設(shè)置
hibernate.use_outer_join的時(shí)候,對(duì)這個(gè)關(guān)聯(lián)允許外連接抓取⑥property-ref:〔可選〕指定關(guān)聯(lián)類的一個(gè)屬性,這個(gè)屬性將會(huì)和本外相對(duì)應(yīng)。如果沒(méi)有指定,會(huì)使用對(duì)方關(guān)聯(lián)類的主鍵⑦access〔可選,默認(rèn)是property〕:Hibernate用來(lái)訪問(wèn)屬性的策略Hibernate設(shè)置一對(duì)一關(guān)聯(lián)public
class
Order
{private
Integer
id;
private
String
orderNumber;}public
String
getOrderNumber()
{this.price
=
price;}private
String
name;public
voriedtsuertnIodr(dIenrtNeugmebreird;)
{·以CuprsivtatoeDmoueblre
p和riceO;rder之間的一對(duì)一關(guān)聯(lián)為例private
Customer
customer;//增加了另外一方的對(duì)象為自己的屬性<phuibleircnacltpeau-sbsmlaCipucpsiItnogtm>egre{r
getId()
{<·classCnaumesp=r"tievnoatmieteIyrn.ertOteru.gdrenjri"aidt;v;abale="Order"
catalog="shop"><coplubmlnicnavmoei=d"siedt"I/pd>u(bIlnitcegIenrteigde)r{getId()
{·<geOnrerdateorrc.lajstsha=i"svrn.eaiatduir=vnei"id>d;<;/generator></id>}
}<co}lumn
name="ordetrhNiusm.biedr"=liedn;gth="10"
/></propuebrl}tiyc>void
setOrderNumber(String
orderNumber)
{public
Strhinsg.goertdNeramNeu(m)be{r
=
orderNumber;<co}lumn
name="pricree"tpurencniasmieo;n="22"
scale="0"
/></propuebrl}tiyc>Double
getPrice()
{<!—order到cpusbtloimcerv的oried一tus對(duì)rent一Npar映miec(射eS;t-r-i>ng
name){<one-}to-one
name="cutshtiosm.enra"mcel=asnsa=m"ee;ntity.Customer"constrained="true"></onep-utbol}-iocnveo>id
setPrice(Double
price)
{}</class></hibernaptueb-lmiacppCiunsgt>omer
getCustomer()
{return
customer;}public
void
setCustomer(Customer
customer)
{this.customer
=
customer;}}測(cè)試一對(duì)一映射,可以看到Hibernate對(duì)·先保存訂單,再保存客戶public
void
insert(){·運(yùn)行后在控Ses制sion臺(tái)sessi下on=s會(huì)essi輸onFac出tory以.ope下nSess語(yǔ)ion(句);Transaction
transaction=session.beginTransaction();Customer
customer=new
Customer();custo這mer.次setN數(shù)ame("據(jù)張三操");作的執(zhí)行流程Order
Order=new
Order();Hibernate:insert
into
sOhrodpe.rO.rsdetrO(rdoerrdNeurmNbuemrb(e"r0,0p0r1i"c)e;)values(?,?)
Hibernate:insert
into
s/h/o關(guān)p.聯(lián)cu訂st單om和er客(n戶ame)values(?)Order.setCustomer(customer);//保存訂單
session.save(Order);//保存客戶session.save(customer);transaction
mit();session.close();}·多對(duì)一映射·一對(duì)多映射·一對(duì)一映射·多對(duì)多映射·雙向映射多對(duì)多映射配置學(xué)生〔Student〕和老師〔Teacher〕就是多對(duì)多的關(guān)系。一個(gè)Student有多個(gè)老師,一個(gè)Teacher教多個(gè)學(xué)生多對(duì)多映射引入兩邊的主鍵作為外鍵持久化對(duì)象之間多對(duì)多的關(guān)聯(lián)關(guān)系是通過(guò)<many-to-many>元素定義的<many-to-manycolumn="column_name"①class="ClassName"②outer-join="true|false|auto"③/>說(shuō)明·①column〔必需〕:這個(gè)元素的外鍵關(guān)鍵字段名②class〔必需〕:關(guān)聯(lián)類的名稱③outer-join〔可選,默認(rèn)為auto〕:在Hibernate系統(tǒng)參數(shù)中hibernate.use_outer_join被翻開的情況下,該參數(shù)用來(lái)允許使用outer
join來(lái)載入此集合的數(shù)據(jù)Hibernate設(shè)置多對(duì)多關(guān)聯(lián)<generator
class="native"></generator></id>}·以Student和Teacher之間的一對(duì)一關(guān)聯(lián)為例p<uhbiblblieicrncaltaes-smSTatepupadciehnegtr>
{<hibern·ate-mp<pSarcpiltpvaviasuntsgedn>IaIenmtene=g"tern實(shí)tidt;體y.Te類acher"table="teacher">private
Str<ricinlngagsnsamnmeae;m;e=<"iedntniatmye.=S"tiud"etnytp"et=a"bilnet=">student">
privateISnete<gSetrudtenatc>hesr<tiud;enatmse=n"eiwd<"HcatosylhpuSeme=nt"<niSantmtue"d=>e"nitd>"(>)<;/c/o/l增um加n>學(xué)生屬性·
pSubtliucdInetengetr
g映etId射(){文<cgeo件nleurmantnoarmec=l"asisd"=">n</actiolvue"mn><>/generator>r<re/etitudur>rn
id;·
pTubeliaccvohides<reste實(shí)Itd(n(IaI體nmntete=eg"g類esertruide)n{t{s"table="student_teacher"cascade="all">this.id
=
id;<key
column="teacher_id"></key>}
</—c!l配ass置>many-to-many--></hiber·nate-pTmuabeplpiaicncSgt>hriengrg映etNa射me()文{<ma件ny-to-many
class="entity.Student"column="student_id"></mraentyu-rtnon-namamamene;y;>}
</set>p<pu/ubcbliacscsv>oid
setName(String
name)
{</hibernate-mapping>
=
name;}publicISnete<gSetrudgentT>eagcehteSrtiud(e)nt{s()
{returntsetaucdhenrts;}public
void
setTSetaucdhenrtisd(SIent<eSgteurdetneta>chsetruide)nt{s)
{this.steuadcehnetrsid==stuedaecnhtesr;id;}}測(cè)試多對(duì)多映射·保存教師信息·解除學(xué)生跟老師的關(guān)系刪除學(xué)生、刪除老工解除public
void
save(){·
運(yùn)行測(cè)試S用essi例on
s,essi生on=成sess的ionF對(duì)acto應(yīng)ry.的openSSeQssLio語(yǔ)n()句;Transaction
transaction=session.beginTransaction();session.close();}ins
r
into
student_teacher
(t
ach
r_id,
student_id)
values
(?,
?)Hpiubelrincavtoei:dibnusielrdt(i)n{to
tetaecahcheerr(2n.asmet)Nvaamleu(e"s李(老?)師");Teacher
teacher=(T
acher)
s
ssion.get(Teacher.
lass,
2)
;師,因?yàn)槔蟬es師sio是n.sa關(guān)vet(rt系aenascah維cetri1護(hù)o)n;者mit(,);所以可以直接解除老師session.saves(etsesaicohne.rc2l)o;se();}與學(xué)生的關(guān)tra系nsa,ctio不n
m用it()手;Hibernate:
select
teach
rest0u_d.eindta.2
sedtN_am_e("te李c四e"r)0;s
i
4
0
, a
h
_.name
as
name4_0_
from
teacher
teacher0_
whereHibernate:
insert
into
steuadcenhte_rt2e.agcehteSrtu(dtenatcsh(e)r._aid,(student_2i);d)
values
(?,
?)pubHlibcervnoaitde:reimnosver(t)i{nto
teTaecahcherer(ntaemaec)hevra1l=unesw(T?e)acher();·Hi為bern老ate:師inse添rt
in加to
st一uedaecnh個(gè)etr(1n.asS學(xué)mets)Nsvai生amolenu(s"es王ss(老i?)o師n="s)e;ssionFactory.openSession();Hibernate:
insert
into
stTuedaecnhter(nteaTamrcea)hnevsra2lc=utneiesown(Tt?e)racnhsearc(t)i;on=session.beginTransaction();Hibernate:insert
into
stsutduednetn_tt1e.asTecehtaTeNcrahame(nerts(eta"eac張acthci三ehoren"_r)ti=;rd(a,Tnesatacuchdteirno)tns_=eisde)sisvoianol.nug.ebste(g?Ti,enaT?cr)haenrs.acltaisosn,()1;);Hibernate:
insert
into
stSutduednent_ttsetatucedhaecnrhte(2rt=.negeaewcthSetru_diedn,ts()(t)u;d.ernetm_oivde)(svtaulduenst()?;,
?)Htiebaecrhneart0e_:.idn=s?ert
into
stSutduednetn_ttsetasucedhseSesntrituo3(dn=te.nenuaetpcwdshSateturued_d(eitendnet,ta=(scnt)he;uewdrSe)tn;utd_eindt)(v)a;lues
(?,
?)Hibernate:select
studenstsu0d_e.nte3a.cshetrsN_taiumd
e(ans"t王t.es五aect"hN)ea;rm2e_(4"_趙1_六,s"t)u;dents0_.student_id
as
student1_1_,stu·dent1刪_.id除as
i學(xué)d2_0生_,st,teuadceh因entr1為_.gt.nerata學(xué)tmSnetsauacd生shtenirato.msn不g(e)2tm_.是Sa0itd_tu(dfd)(r關(guān)e;sontmtusds系(et)nu.dtae1維dn)d;t(_護(hù)steuadc者ehnetr),s;tud所ents以0_
i需nner要joi先n
st手udentstudent1_
on
students0_.tsetaucdhenrt1_.igsde=tsSstiuodne.nctl1so_(s.e)i.(d)a;wdhde(sretusdteundte3n)t;s0_.teacher_id=?Hibern工ate:解}ins除ert
i老nto師stueda與cenhet學(xué)r(2n.agm生et)sSevt的suasldiueoen關(guān)nst.s(u(?聯(lián)p)d.atd,ed(tset然aucdhen后rt)1;)再;多H多ib·ern對(duì)at運(yùn)e:i多n行多ser測(cè)t
i性nt試o
sSt用能utdueden例tnt不(ns,taSmutedue)生S佳d佳nevtsna1slt成=iunsoet,nswu的s(dSe?etsn)ust對(duì)di數(shù)=數(shù)eo(nSt=t應(yīng)(su)ed;據(jù)se的snito)nsSF量e量aQscstLior語(yǔ)ny大.goep句te(nS時(shí)teusdseinot應(yīng)n.(c)l;as盡s盡,2);可能防防止使使用·多對(duì)一映射·一對(duì)多映射·一對(duì)一映射·多對(duì)多映射·雙向映射雙向一對(duì)多映射雙向一對(duì)多與雙向多對(duì)一是完全相同的兩種情形。雙向一對(duì)多需要在一的一端可以訪問(wèn)多的一端,反之依然從Order到Customer的多對(duì)一雙向關(guān)聯(lián)需要在
Order類中定義一個(gè)Customer屬性,還要在
Customer類中需定義存放Order對(duì)象的集合屬性Hibernate設(shè)置雙向多對(duì)一關(guān)聯(lián)·Order.java·
在Order中需要定義Customer屬性件中,使用<one-to-many>元素來(lái)映在Order的映射文件中,使用<many-to-one>元素來(lái)映射this.id
=
id;this.orderNumber
=
orderNumber;return
this.price;private
Integer
id;private
SCturstinomgenracmeus;tomer;
//定義Customer屬性private
StertiOnrgdoerdeesr=NunembweHra;shSet(0);//定義Order屬性purbivlaitceInDtoeugbeler
gpretiIcde;()
{·CustpuoblmiceInrte.grejertguaertnvItdah(i)s{.id;}
return
this.id;·
在}publCicuvsoitd
soemtIed
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)凈白去角質(zhì)素行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年中國(guó)碳鋼離子交換器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)氟碳噴涂百葉窗數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)光線治療儀數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)MJX防水膩?zhàn)訑?shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)紙制化妝品包裝盒市場(chǎng)調(diào)查研究報(bào)告
- 印刷設(shè)備結(jié)構(gòu)優(yōu)化與仿真分析考核試卷
- 冷藏車運(yùn)輸行業(yè)發(fā)展趨勢(shì)與政策導(dǎo)向考核試卷
- 化工產(chǎn)品批發(fā)商銷售業(yè)績(jī)?cè)u(píng)價(jià)與激勵(lì)策略考核試卷
- 體育表演運(yùn)動(dòng)康復(fù)與體能訓(xùn)練結(jié)合考核試卷
- JGJ46-2024 建筑與市政工程施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)
- 家譜、宗譜頒譜慶典講話
- 方案報(bào)審表(樣表)
- pp顧問(wèn)的常見(jiàn)面試問(wèn)題
- 法理學(xué)原理與案例完整版教學(xué)課件全套ppt教程
- 隧道仰拱施工之仰拱棧橋結(jié)構(gòu)計(jì)算書
- 軟體家具、沙發(fā)質(zhì)量檢驗(yàn)及工藝
- Q∕GDW 12118.1-2021 人工智能平臺(tái)架構(gòu)及技術(shù)要求 第1部分:總體架構(gòu)與技術(shù)要求
- 中建一局醫(yī)院直線加速器室專項(xiàng)施工方案
- 二年級(jí)一起長(zhǎng)大的玩具原文一起長(zhǎng)大的玩具.doc
- 青島版小學(xué)科學(xué)三年級(jí)下冊(cè)《太陽(yáng)和影子》教學(xué)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論