Java-EE輕量級框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第1頁
Java-EE輕量級框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第2頁
Java-EE輕量級框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第3頁
Java-EE輕量級框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第4頁
Java-EE輕量級框架應(yīng)用開發(fā) Hibernate的關(guān)聯(lián)映射_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論