版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java-EE輕量級框架應(yīng)用開發(fā)第6章-
Hibernate的關(guān)聯(lián)映射本章要點·多對一映射·一對多映射·一對一映射·多對多映射·雙向映射·Hibernate的主要目的就是Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫一些數(shù)據(jù)庫表的關(guān)系應(yīng)該可以通過hibernate實現(xiàn),比方在數(shù)據(jù)庫中常用到的主外鍵關(guān)系;還有一些跟主外鍵有關(guān)的設(shè)置,比方主鍵的信息被刪除,外鍵關(guān)聯(lián)的信息也要刪除等等如果把表抽象為實體類,這些關(guān)系可以抽象為實體類之間的一對一、多對一、一對多、多對多等關(guān)系。在Hibernate正確的配置這些關(guān)系以后,
Hibernate能夠處理這些復(fù)雜的關(guān)系,提高了開發(fā)的效率多對一映射配置如果規(guī)定一個客戶〔Customer〕可以建立多個訂單〔
Order〕,一個訂單只屬于一個顧客,這就是一個多對一關(guān)聯(lián)從Order到Customer的多對一單向關(guān)聯(lián)需要在Order類中定義一個Customer屬性,而在Customer類中無需定義存放Order對象的集合屬性關(guān)系數(shù)據(jù)模型Order表中的customer_id參照customer表的主鍵id·通過在映射文件中的many-to-one元素,可以定義持久化類間的多對一的關(guān)聯(lián),這種關(guān)系模型實際上是一個對象引用<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"⑦⑧/>說明①name:屬性名②column〔可選〕:字段名③class〔可選,默認(rèn)是通過反射得到屬性類型〕:關(guān)聯(lián)的類的名字④cascade〔級聯(lián)〕〔可選〕:指明哪些操作會從父對象級聯(lián)到關(guān)聯(lián)的對象,cascade屬性允許以下值none::在保存,更新或刪除當(dāng)前對象時,忽略其他關(guān)聯(lián)的對象,它是cascade屬性的默認(rèn)值save-update:當(dāng)通過Session的save(),update()以及
saveOrUpdate()方法來保存或更新當(dāng)時對象時,級聯(lián)保存所有關(guān)聯(lián)的新建的臨時對象,并且級聯(lián)更新所有關(guān)聯(lián)的游離對象delete:當(dāng)通過Session的delete()方法刪除當(dāng)前對象時,級聯(lián)刪除所有關(guān)聯(lián)的對象all:包含save-update以及delete的行為.此外,對當(dāng)前對象執(zhí)行
outer-join〔外連接〕〔可選,默認(rèn)為自動〕:當(dāng)設(shè)置
hibernate.use_outer_join時,對這個關(guān)聯(lián)允許外連接抓取。outer-join參數(shù)允以下3個不同值auto〔默認(rèn)〕:如果被關(guān)聯(lián)的對象沒有代理〔Proxy〕,使用外連接抓取關(guān)聯(lián)〔對象〕true:一直使用外連接來抓取關(guān)聯(lián)false:永遠(yuǎn)不使用外連接來抓取關(guān)聯(lián)⑥update、insert〔可選,默認(rèn)為true〕:指定對應(yīng)的字段是否在用于
UPDATE和/或INSERT的SQL語句中包含。如果二者都是false,那么這是一
個純粹的“衍生〔Derived〕〞關(guān)聯(lián),它的值是通過映射到同一個〔或多個〕字段的某些其他屬性得到的,或者通過Trigger〔觸發(fā)器〕,或者其他程序
⑦property-ref:〔可選〕:指定關(guān)聯(lián)類的一個屬性,這個屬性將會和本外鍵相對應(yīng)。如果沒有指定,會使用對方關(guān)聯(lián)類的主鍵⑧access〔可選,默認(rèn)是property〕:Hibernate用來訪問屬性的策略Hibernate設(shè)置多對一關(guān)聯(lián)·以O(shè)rder和Customer之間的多對一關(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〞方的對象為自己的屬性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;測試多對一映射·先保存訂單,再保存客戶public
void
insert(){·
運行后在控制Se臺ssi下on
se會ssi輸on=s出essi以onFa下cto語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();}·
運行后在控S制essi臺on
s下essi會on=輸sess出ionF以acto下ry.語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(){·
運行后在控S制essi臺on
s下essi會on=s輸essi出onF以acto下ry.o語penS句ess,io可n();以看到HibernateTransaction
transaction=session.beginTransaction();對這次數(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個er("臨o_00時1");對象時,在默認(rèn)情況下,它不會自動持久Ord化er.s所etCu關(guān)sto聯(lián)mer(的cust其omer他);臨時對象,會拋出
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的話,可實現(xiàn)自動持久化所關(guān)聯(lián)的對象,對剛剛order的映射文件里的many-to-one進(jìn)行修改·再次運行前面的代碼,運行后在控制臺下會輸出以下語句<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會rder自(cus動tome執(zhí)r_id,行orde了rNum保ber,存pricce)uvasluteso(?m,?e,r?)的操作·多對一映射·一對多映射·一對一映射·多對多映射·雙向映射一對多映射配置·
Hibernate提供了一對多關(guān)系的標(biāo)簽<one-to-many>,一對多是在一的一端維護(hù)多的一端·
一對多關(guān)系的對象模型在日常生活中也經(jīng)??吹?,一個客戶〔Customer〕可以有多張訂單〔Order〕,所以客戶和訂單的關(guān)系也是一對多的關(guān)系·
在進(jìn)行關(guān)系映射時需要在一的一端添加對應(yīng)的set屬性,并在它的配置文件中添加set標(biāo)簽,在set標(biāo)簽中配置相應(yīng)的<one-to-many>標(biāo)簽在Hibernate設(shè)置一對多關(guān)聯(lián)set屬性,但是只是說明了延性配置對應(yīng)的對象,屬return
Order;·以O(shè)rder和Customer之間的一對多關(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對bli象c
Set中g(shù)et使Orde用r()了{(lán)遲<}加colu載mn
n的ame=屬"nam性e"l,engt并h="2沒0">有</co為lumn屬></properptuyb>lic
void
setOrder(Set
Order)
{<set性nam的e="O對rder象es"t是ihnivse.要rOsred=在e"rt=r映uOer"d>e射r;文件中來配置的,需要添加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;}}測試多對一映射·寫入數(shù)據(jù)加Order對象時應(yīng)該使用p·ublic寫void入sav數(shù)e(){據(jù)需要注意的是一對多的關(guān)系,所以在添加的Session
session=sessionFactory.openSession();時候需要添加Tran多sact個ionOtrrandsaectri類on=s,essi另on.b外egi由nTra于nsac在tionC()u;stomer中添Order
order1=new
Order();加了對應(yīng)的soredetr1屬.set性O(shè)rd,erNu所mber以("00在1")添;session.save(order1);HashSet來添Or加der
,orde這r2=n樣ew
O即rder可();實現(xiàn)一對多的關(guān)系order2.setOrderNumber("002");session.save(order2);·
運行測試用Cu例stom,er
c生usto成mer=的new對Cust應(yīng)omer的();SQL語句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ù)有加載的對象都添加不很高public
void
load(){·
寫入Se操ssio作n
se相ssio對n=s簡essi單onFa,ctor只y.o需penS要essi把on()所;Transaction
transaction=session.beginTransaction();到Transient/狀/獲態(tài)取主下鍵為,1的運客戶行信息相應(yīng)的方法就可以插入內(nèi)容,Customer
customer
=
(Customer)
session.load(Customer.class,1);但是對/應(yīng)/打的印客讀戶信取息操作就會稍微復(fù)雜點,因為需要迭代獲取所有的訂//設(shè)單置訂對單象集合,,通所過客以戶這加載種訂單一集合對多的關(guān)系效率并Set
Order=customer.getOrder();//迭代集合,打印集合中訂單的信息for(Iterator
iter=Order.iterator();iter.hasNext();){·
生成的相}應(yīng)的語句及信息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·一對多的關(guān)系也是經(jīng)常用到的,但是這種關(guān)系在加載時效率會不高,因為需要維護(hù)的數(shù)據(jù)較多,所以不建議使用一對多的關(guān)系,可以考慮多對一的關(guān)系,這樣在加載時其實是一種一對一的關(guān)系,加載的效率較高,關(guān)系和對象模型得到了優(yōu)化·多對一映射·一對多映射·一對一映射·多對多映射·雙向映射一對一映射配置·如果規(guī)定一個客戶〔Customer〕只能建立一個訂單〔Order〕,一個Order只屬于一個Customer,這就是一個一對一關(guān)聯(lián)從Order到Customer的一對一單向關(guān)聯(lián)需要在Order類中定義一個Customer屬性,而在Customer類中無需定義存放Order對象的集合屬性關(guān)系數(shù)據(jù)模型Order表中的customer_id參照
customer表的主鍵id·通過在映射文件中的<one-to-one>元素,可以定義持久化類之間的一對一的關(guān)聯(lián),這種關(guān)系模型實際上是一個對象引用<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"⑥⑦/>說明·
①name:屬性的名字②class〔可選-默認(rèn)是通過反射得到的屬性類型〕:被關(guān)聯(lián)的類的名字③cascade〔級聯(lián)〕〔可選〕說明操作是否從父對象級聯(lián)到被關(guān)聯(lián)的對象④constrained〔約束〕〔可選〕說明該類對應(yīng)的表對應(yīng)的數(shù)據(jù)庫表,和被關(guān)聯(lián)的對象所對應(yīng)的數(shù)據(jù)庫表之間,通過一個外鍵引用對主鍵進(jìn)行約束。這個選項影響save()和delete()在級聯(lián)執(zhí)行時的先后順序
outer-join〔外連接〕〔可選,默認(rèn)為自動〕:當(dāng)設(shè)置
hibernate.use_outer_join的時候,對這個關(guān)聯(lián)允許外連接抓?、辮roperty-ref:〔可選〕指定關(guān)聯(lián)類的一個屬性,這個屬性將會和本外相對應(yīng)。如果沒有指定,會使用對方關(guān)聯(lián)類的主鍵⑦access〔可選,默認(rèn)是property〕:Hibernate用來訪問屬性的策略Hibernate設(shè)置一對一關(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之間的一對一關(guān)聯(lián)為例private
Customer
customer;//增加了另外一方的對象為自己的屬性<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對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;}}測試一對一映射,可以看到Hibernate對·先保存訂單,再保存客戶public
void
insert(){·運行后在控Ses制sion臺sessi下on=s會essi輸onFac出tory以.ope下nSess語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();}·多對一映射·一對多映射·一對一映射·多對多映射·雙向映射多對多映射配置學(xué)生〔Student〕和老師〔Teacher〕就是多對多的關(guān)系。一個Student有多個老師,一個Teacher教多個學(xué)生多對多映射引入兩邊的主鍵作為外鍵持久化對象之間多對多的關(guān)聯(lián)關(guān)系是通過<many-to-many>元素定義的<many-to-manycolumn="column_name"①class="ClassName"②outer-join="true|false|auto"③/>說明·①column〔必需〕:這個元素的外鍵關(guān)鍵字段名②class〔必需〕:關(guān)聯(lián)類的名稱③outer-join〔可選,默認(rèn)為auto〕:在Hibernate系統(tǒng)參數(shù)中hibernate.use_outer_join被翻開的情況下,該參數(shù)用來允許使用outer
join來載入此集合的數(shù)據(jù)Hibernate設(shè)置多對多關(guān)聯(lián)<generator
class="native"></generator></id>}·以Student和Teacher之間的一對一關(guān)聯(lián)為例p<uhbiblblieicrncaltaes-smSTatepupadciehnegtr>
{<hibern·ate-mp<pSarcpiltpvaviasuntsgedn>IaIenmtene=g"tern實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實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;}}測試多對多映射·保存教師信息·解除學(xué)生跟老師的關(guān)系刪除學(xué)生、刪除老工解除public
void
save(){·
運行測試S用essi例on
s,essi生on=成sess的ionF對acto應(yīng)ry.的openSSeQssLio語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)
;師,因為老ses師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個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對at運e:i多n行多ser測t
i性nt試o
sSt用能utdueden例tnt不(ns,taSmutedue)生S佳d佳nevtsna1slt成=iunsoet,nswu的s(dSe?etsn)ust對di數(shù)=數(shù)eo(nSt=t應(yīng)(su)ed;據(jù)se的snito)nsSF量e量aQscstLior語ny大.goep句te(nS時teusdseinot應(yīng)n.(c)l;as盡s盡,2);可能防防止使使用·多對一映射·一對多映射·一對一映射·多對多映射·雙向映射雙向一對多映射雙向一對多與雙向多對一是完全相同的兩種情形。雙向一對多需要在一的一端可以訪問多的一端,反之依然從Order到Customer的多對一雙向關(guān)聯(lián)需要在
Order類中定義一個Customer屬性,還要在
Customer類中需定義存放Order對象的集合屬性Hibernate設(shè)置雙向多對一關(guān)聯(lián)·Order.java·
在Order中需要定義Customer屬性件中,使用<one-to-many>元素來映在Order的映射文件中,使用<many-to-one>元素來映射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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版模具材料供應(yīng)與設(shè)備租賃合作協(xié)議2篇
- 美甲店二零二五年度供應(yīng)鏈管理及采購合同4篇
- 小學(xué)高年級學(xué)生的自主學(xué)習(xí)能力在語文教學(xué)中的培養(yǎng)策略
- 智慧辦公啟迪思維提升工作效率的新方法
- 2025版事業(yè)單位管理崗位聘用合同范本3篇
- 2025年新型停車場運營管理服務(wù)出租協(xié)議4篇
- 2025年度跨境電商進(jìn)口米面糧油品牌代理合同4篇
- 2025年度民用爆破工程爆破作業(yè)人員資質(zhì)認(rèn)證合同4篇
- 2025版信托資金借貸合同稅收優(yōu)惠條款范本3篇
- 娃娃機社交媒體營銷合同(二零二五)2篇
- 南通市2025屆高三第一次調(diào)研測試(一模)地理試卷(含答案 )
- 2025年上海市閔行區(qū)中考數(shù)學(xué)一模試卷
- IF鋼物理冶金原理與關(guān)鍵工藝技術(shù)1
- 銷售提成對賭協(xié)議書范本 3篇
- 勞務(wù)派遣招標(biāo)文件范本
- 信息安全意識培訓(xùn)課件
- Python試題庫(附參考答案)
- 碳排放管理員 (碳排放核查員) 理論知識考核要素細(xì)目表三級
- 2024年河北省中考數(shù)學(xué)試題(含答案解析)
- 小學(xué)二年級數(shù)學(xué)口算練習(xí)題1000道
- 納布啡在產(chǎn)科及分娩鎮(zhèn)痛的應(yīng)用
評論
0/150
提交評論