锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
鎹釜渚嬪瓙錛氫功涓婅inverse=false鏃訛紝鐢變富鎺ф柟緇存寔鍏崇郴銆傘傘?br style="line-height: normal; " /> 鐢變簬鎴戜篃鏄垵瀛﹁呫傘傘傚啀鍔犱笂璇枃姘村鉤鍋忎綆銆傘傘備笉鐞嗚В“緇存寔鍏崇郴鏄暐鎰忔?#8221;鍥
鎻愮ず錛?br style="line-height: normal; " /> (1)濡傛灉錛氭偍涓嶄簡瑙ibernate鐨刼ne-to-many鎴杕any-to-one鐨勬蹇點?/span>
(2)濡傛灉錛氫綘涓嶄簡瑙ibernate鐨?#8220;鑷敱鎬?#8221;“鎸佷箙鎬?#8221;“娓哥鎬?#8221;鐨勬蹇點?/span>
(3)濡傛灉錛氭偍涓嶄簡瑙ibernate涓殑“鑴忔暟鎹?#8221;鐨勬蹇點?/span>
(4)濡傛灉錛氭偍瀵笻ibernate涓璖ession緙撳瓨錛屾病鏈夊垵姝ヤ簡瑙g殑璇濄?br style="line-height: normal; " /> (鍦℉ibernate涓皟鐢╯ave榪涜瀛樺偍鏁版嵁鐨勬椂鍊?騫朵笉鏄┈涓婂氨瀵規暟鎹簱榪涜insert鎿嶄綔錛岃屾槸浼氬皢鍏?#8220;鏁版嵁瀵硅薄(vo)”綰沖叆Hibernate鐨凷ession緙撳瓨銆?
鍦ㄤ笂闈㈢殑4鏉℃彁紺轟腑錛屽鏋滄偍瀵瑰叾涓殑鏌愪竴鏉★紝涓嶆槸寰堟竻妤氱殑璇濄傚笇鏈涜鍏堜簡瑙f湁鍏崇煡璇嗐?br style="line-height: normal; " /> 鍚﹀垯錛屽彲鑳芥偍灝?“鏃犳硶鎴栧緢闅?#8221;鐞嗚В cascade 鎴?inverse 榪?涓睘鎬с?/span>
棣栫浉錛宑ascade 涓?inverse 榪欎袱涓睘鎬э紝鍏跺疄鏄畬鍏ㄤ笉鍚岀殑涓や釜涓滆タ錛屾兂瑕佷簡瑙d粬浠悇鑷殑“鐢ㄩ斾笌鍖哄埆”錛岃瑙佸涓嬩粙緇嶏細
榪欓噷鏈変袱涓〃:
錛?錛塩lass (鐝駭琛?
鐩稿簲瀛楁錛?br style="line-height: normal; " />
cid varchar(32) 涓婚敭 not-null (鐝駭id)
cname varchar(16) not-null (鐝駭鍚嶇О)
錛?錛塻tudent (瀛︾敓琛?
鐩稿簲瀛楁錛?br style="line-height: normal; " />
sid varchar(32) 涓婚敭 not-null (瀛︾敓id)
sname varchar(16) not-null (瀛︾敓濮撳悕)
class_id varchar(32) not-null (瀛︾敓鎵灞炵彮綰?
涓涓彮綰?class)瀵瑰簲澶氫釜瀛︾敓(student)錛屾墍浠ョ彮綰ц〃(class)灝辨槸“one-to-many”绔?br style="line-height: normal; " /> 鍙嶄箣student灝辨槸many-to-one
//--------Class綾葷殑浠g爜--------
public class Class implements.....
{
private cId = "";
private cName = "";
private students = java.util.HashMap();
// 鐪佺暐瀵瑰簲鐨?geter setter
}
//--------Class.hbm.xml--------
<hibernate-mapping>
<class name="lcx.vo.Class" table="class"
catalog="demo">
<id name="cid" type="java.lang.String">
<column name="cid" length="32" />
<generator class="uuid.hex" />
</id>
<property name="name" type="java.lang.String">
<column name="cname" length="16" not-null="true" />
</property>
<set name="students" table="student" cascade="save-update">
<key column="class" />
<one-to-many class="lcx.vo.Student" />
</set>
</class>
</hibernate-mapping>
//--------Student綾葷殑浠g爜;*******
public class Student implements.....
{
private sId = "";
private sName = "";
private Class class = null;
// 鐪佺暐瀵瑰簲鐨?geter setter
}
// Student.hbm.xml
<hibernate-mapping>
<class name="lcx.vo.Student" table="student" catalog="demo">
<id name="cid" type="java.lang.String">
<column name="sid" length="32" />
<generator class="uuid.hex" />
</id>
<many-to-one name="class"
class="lcx.vo.Class"
column="class_id"
not-null="true"
/>
</class>
</hibernate-mapping>
錛堜竴錛?cascade 鐨勪粙緇嶏細
褰揌ibernate鎸佷箙鍖栦竴涓?#8220;涓存椂瀵硅薄(涔熷彨鑷敱鎬佸璞?”鏃訛紝鍦ㄩ粯璁ょ殑鎯呭喌涓?鍗籌細娌℃湁璁劇疆cascade灞炴ф垨cascade=none鏃?錛孒ibernate涓嶄細鑷姩“鎸佷箙鍖栦粬鎵鍏寵仈”鐨勫叾浠栦復鏃跺璞°?/span>
涓婇潰榪欎簺璇濇槸浠涔堟剰鎬濆憿錛?浠涔堝彨涓嶄細鑷姩 “鎸佷箙鍖?#8221;鍏寵仈鐨勪復鏃跺璞″憿錛?/span>
鐪嬪涓嬩唬鐮侊細
// 鍒涘緩涓涓?涓存椂瀵硅薄(涔熷彨鑷敱鎬佸璞?
// 涔熷氨鏄榪欎釜 class 娌℃湁琚獺ibernate綰沖叆Session緙撳瓨綆$悊銆?br style="line-height: normal; " />
Class class = new Class();
//class.id 涓鴻嚜鍔ㄧ敓鎴?br style="line-height: normal; " />
class.setName("涓騫寸駭1鐝?);
Student stu = new Student();
//student.id 涓鴻嚜鍔ㄧ敓鎴?br style="line-height: normal; " />
stu.setName("灝忕櫧鍏?);
stu.setClass(class);
// 鍏抽敭灝辨槸榪欓噷銆傘傘?br style="line-height: normal; " /> class.getStudents().add(stu);
session.save(class);
// 鎻愪氦
// 娉ㄦ剰: Class.hbm.xml鏂囦歡涓?cascade="save-update"騫朵笖涔熸病鏈夎緗甶nverse灞炴?涔熷氨鏄inverse=false;
// 姝ゆ椂濡傛灉浣犲紑鍚簡Hibernate鐨勬樉紺篐QL璇彞鍔熻兘錛岄偅涔堟帶鍒跺彴灝嗕細鏄劇ず濡備笅3鏉QL錛?/span>
//----------------------------------------********
insert into demo.class (cid, cname) values (66666666666666666666666666666666, 涓騫寸駭1鐝?
insert into demo.student (sid,sname,class_id) values (8888888888888888811cb2e04c888888, 灝忕櫧鍏? 66666666666666666666666666666666)
update demo.student set class_id=66666666666666666666666666666666 where sid=8888888888888888811cb2e04c888888
//----------------------------------------********
閭d箞涓轟粈涔堜細鍑虹幇錛岃繖3鏉QL璇彞鍛紝鎴戜滑鏉ヤ竴涓鍒嗘瀽涓涓嬶細
絎?鏉QL璇彞:
鍏跺疄絎竴鏉QL姣旇緝濂界悊瑙o紝
褰撴垜浠皟鐢?session.save(class) 鍚庯紝鍦℉ibernate榪涜鎻愪氦鐨勬椂鍊欙紝
浼氬彂鐜?#8220;鏈?#8221;涓鏉?#8220;鏂?#8221;鐨勬暟鎹鎻掑叆(insert)錛屾墍浠ュ氨寰class琛ㄤ腑,鎻掑叆浜嗚繖鏉℃柊鐨刢lass璁板綍銆?/span>
絎?鏉QL璇彞錛?br style="line-height: normal; " /> 娉ㄦ剰闂灝卞湪榪欓噷錛?br style="line-height: normal; " /> 榪欓噷涓轟粈涔堝張鍑虹幇浜嗕竴鏉nsert璇彞鍛紵鑰屼笖榪樻槸鍚憇tudent琛ㄤ腑鎻掑叆鏁版嵁銆?br style="line-height: normal; " /> 鎴戜滑鍦ㄤ笂闈㈢殑浠g爜涓紝騫舵病鏈夌紪鍐欑被浼?#8220;session.save(student)”榪欐牱鐨勮鍙ュ晩銆?br style="line-height: normal; " /> 榪欐槸涓轟粈涔堝憿錛?br style="line-height: normal; " /> 鍏跺疄鍘熷洜錛屾槸榪欎箞鍥炰簨錛氬洜涓烘垜浠湪class绔紝璁劇疆浜?綰ц仈鏇存柊"(鍗?cascade="save-update")錛?br style="line-height: normal; " /> 涔熷氨鏄錛屽綋Hibernate鍦ㄥ悜class琛ㄤ腑鎻掑叆“鏂?#8221;瀵硅薄璁板綍鏃訛紝浼氭鏌?#8220;Class瀵硅薄”鎵鍏寵仈鐨勫睘鎬?灝辨槸<set>瀵瑰簲鐨勫睘鎬?錛屾槸鍚﹀彂鐢熻繃鍙樺寲錛屽鏋滃彂鐢熶簡鍙樺寲錛屽氨鎸夌収“綰ц仈灞炴?cascade)”鎵璁懼畾鐨勫唴瀹?br style="line-height: normal; " /> 榪涜鎿嶄綔銆?/span>
涓婇潰璁茬殑榪欏彞璇濆埌搴曟槸浠涔堟剰鎬濆憿錛?br style="line-height: normal; " />
鐢ㄤ綘浠?#8220;浜?#8221;璇濊錛屽氨鏄細
鍥犱負璋冪敤浜?class.getStudents().add(stu);
鎵浠ワ紝鍦℉ibernate鍦ㄨ繘琛屾彃鍏?class瀵硅薄鐨勬椂鍊欙紝鍙戠幇class瀵硅薄錛屾墍鍏寵仈鐨勯泦鍚堜腑錛屾湁涓鏉?br style="line-height: normal; " />
“鑷敱鎬?#8221;鐨勫璞★紝鑰屽張鍥犱負class绔緗簡“綰ц仈灞炴ascade”錛屾墍浠ワ紝鍦ㄦ彃鍏ヨ繖鏉?“鏂癱lass瀵硅薄”鏃訛紝涔熶竴鍚屾妸浠栧唴閮ㄧ殑閭d簺錛岃繕灞炰簬“鑷敱鎬?#8221;鐨勫叾浠栧璞★紝涔熶竴鍚屾彃鍏ュ埌錛屼粬浠墍瀵瑰簲鐨勮〃涓幓浜嗐?/span>
榪樻槸涓嶆槑鐧界殑璇濄傘傘傚彲浠ョ湅鐪嬨傚瓩鍗惔鐨勩婄簿閫欻ibernate銆嬶紝鍦ㄤ功涓婄殑絎?49欏墊湁銆?br style="line-height: normal; " /> 浣嗘槸鍏充簬inverse鐨勪粙緇嶃傘傘傚啓鐨勫氨鏈変簺涔﹂潰鍖栦簡錛屽鏋滆鏂囦笉濂界殑璇濄傘傘傚氨闅炬噦鍜瘇
絎?鏉QL璇彞錛?br style="line-height: normal; " />
絎笁鏉QL璇彞鏄竴鏉pdate璇彞錛屾槸涓嶆槸瑙夊緱錛屽緢鑾悕鍏跺銆傘傘傘?br style="line-height: normal; " />
Hibernate澶ц剳榪涙按浜嗗惂錛屾庝箞鍚冮ケ浜嗘拺寰楋紝閲嶅鏇存柊璁板綍鍟婂晩鍟婂晩鍟?br style="line-height: normal; " />
鍋囧錛氭垜浠妸 class绔殑閰嶇疆鏂囨。涓殑 invser灞炴ц緗負true(鍗籌細inverse=true)
鍦ㄦ墽琛屼笂闈㈢殑紼嬪簭錛屽彂鐜幫紝灝卞彉鎴?鏉nsert璇彞鍟︺傘傘傘傘?update娌″暒銆傘傘?
鐪嬫潵絎笁鏉$殑update璇彞鍜宨nverse鏈夌潃瀵嗗垏鐨勫叧緋伙紙浠栦袱鏈変竴鑵縹錛夈?/span>
鎵浠ユ垜浠笅杈癸紝灝辨潵浠嬬粛涓涓媔nverse灞炴?
褰撹皟鐢?Class.getStudents().add(stu)鏂規硶錛岃繘琛屾坊鍔犳搷浣滄椂錛?nbsp;
(鍗籌細鍚?"榪欎釜Class瀵硅薄"鎵灞炵殑“闆嗗悎 (涔熷氨鏄皟鐢╣etStudents鏂規硶鎵榪斿洖鐨勯偅涓猄et闆嗗悎)”涓坊鍔犱竴涓猄tudent(鍗?add(stu))錛屼篃灝辨槸璇達紝榪欎釜“鏂?#8221;娣誨姞鐨凷tudent瀵硅薄(stu)錛?nbsp;
浠栫殑Student.class_id瀛楁“蹇呴』”錛岃絳変簬“琚坊鍔犳柟Class”鐨勪富閿?鍗?Class.cid)銆?nbsp;
浠?#8220;鏁版嵁搴?#8221;灞傞潰鏉ヨ錛屼篃灝辨槸璇達紝榪欎釜“鏂?#8221;娣誨姞鐨?#8220;Student”鐨刢lass_id瀛楁錛屽繀欏昏涓?#8220;Class”鐨刢id瀛楁錛屽瓨鍦?涓誨閿叧鑱?銆?
姝e洜涓哄姝わ細鎵浠ibernate“鎬?#8221; 鍦ㄨ繘琛?"Class.getStudents().add(stu)" 榪欐牱鐨勬搷浣滄椂錛?nbsp;
鍑虹幇鎰忓鎯呭喌(濡? stu.getClass=null錛屽嵆錛歴tu娌℃湁鎵灞炵彮綰?錛?br style="line-height: normal; " />
鍗?#8220;娣誨姞鏂?#8221;(Student)涓?#8220;琚坊鍔犳柟”(Class)錛屽瓨鍦?#8220;澶栭敭”涓嶄竴鑷寸殑鎯呭喌鍙戠敓銆?nbsp;
鎵浠ュ氨鍑虹幇浜?閭f潯澶氫綑鐨剈pdate璇彞銆傚嵆錛歰ne-to-many錛圕lass绔級涓誨姩鍘葷淮鎶hild.Class_id
鎵浠ュ氨鏄錛孒ibernate鎬曞嚭閿欙紝灝辯粰浣犲鎵ц涓嬈℃棤鐢ㄧ殑鏇存柊璇彞錛屼互淇濊瘉 add 鍒?Class“闆嗗悎”涓殑鎵鏈塖tudent
閮芥槸瑕佷笌Class鏈夊閿叧鑱旂殑銆?/span>
鐢ㄦ櫘閫氳瘽璇村氨鏄?
涓騫?鐝?getStudents().add(灝忕櫧鍏?;
涓騫?鐝?getStudents().add(澶х櫧鍏?;
涔熷氨鏄鐜板湪涓嶇鏄?灝忕櫧鍏?榪樻槸 澶х櫧鍏?nbsp;
濡傛灉浠栦滑錛岀洰鍓嶈繕娌℃湁鑷繁鐨勭彮綰х殑璇濓紝
涓騫?鐝殑鐝富浠誨氨浼氫富鍔ㄩ個璇蜂粬浠垚涓轟竴騫?鐝殑鍚屽鍟銆?/span>
涔熷氨鏄 涓騫?鐝殑鐝富浠?涓誨姩閭璇?鍚屽錛岃屼笉鏄?鍚屽鑷繁鏉~~ 鎵浠ユ晥鐜囦篃闄嶄綆浜嗐傘傘傘?/span>
鎵浠ユ垜浠竴鑸妸 涓瀵瑰绔?invser璁劇疆涓簍rue錛屽嵆錛氫笉璁╀富鎺х鍘葷淮鎶や富閿叧鑱旓紝
錛堝嵆錛氳鍚屽鑷繁鍘繪壘鐝駭錛?br style="line-height: normal; " />
璇寸櫧浜嗭紝灝辨槸錛宱ne-to-many绔笉鐢ㄥ幓綆$悊 “鏂版坊鍔犲璞?#8221; 鐨勪富澶栭敭綰︽潫闂銆?/span>
鎶妎ne-to-many绔紙鍗?class绔?鐨刬nvser璁劇疆涓簍rue
(鍗籌細姣忔鍚慶lass.getStudents榪欎釜闆嗗悎涓坊鍔?student鏃訛紝涓嶅幓涓誨姩update瀵瑰簲鐨勫閿?錛?br style="line-height: normal; " />
鑰屾槸鍦╯tudent绔幓鎵嬪姩璁劇疆
渚嬪錛?br style="line-height: normal; " />
student.setClass(class);
session.save(student);
榪欐牱鎵嬪姩璁劇疆 student涓巆lass鍏寵仈鍟︺傘傘傘?br style="line-height: normal; " />
鎵浠ヤ笂闈㈢殑紼嬪簭“鏈濂?#8221;榪樻槸鍐欐垚榪欐牱錛?/span>
Class class = new Class();
class.setName("涓騫寸駭1鐝?);
session.save(class);
Student stu = new Student();
stu.setName("灝忕櫧鍏?);
stu.setClass(class);
session.save(class);
/*
姝ゆ椂鍚慶lass闆嗗悎add鍐呭錛屼笉浼氳繘琛屾暟鎹簱鎿嶄綔(update)銆?br style="line-height: normal; " />
“鏇存柊”鐨勫彧鏄痵ession緙撳瓨涓紝鏁版嵁闀滃儚銆?br style="line-height: normal; " />
榪欐牱鍋氱殑濂藉鏄細涓嶄粎鍑忓皯浜唘pdate璇彞錛?br style="line-height: normal; " />
鑰屼笖錛屽悓鏃朵篃鏇存柊浜唖ession緙撳瓨銆?br style="line-height: normal; " />
------------------------
鑰屽湪鍘熸潵:
one-to-many绔痠nverse=false鏃訛紝铏界劧涔熸洿鏂皊eesion緙撳瓨涓殑class闆嗗悎錛?br style="line-height: normal; " />
浣嗘槸鏈夊嵈鍙堝浣檜pdate
*/
class.getStudents().add(stu);
// 鎻愪氦
鎬葷粨:
褰搃nverse=false 騫朵笖鍚憃ne-to-many绔殑鍏寵仈闆嗗悎錛屾坊鍔?#8220;鏂板璞?鍗? 鑷敱鎬佸璞?” 鏃訛紝
Hibernate灝變細鑷姩錛屽幓update閭?#8220;涓垰鍒氬埌鏉ョ殑” “鑷敱鎬佸璞?#8221;鐨勫閿?br style="line-height: normal; " />
錛堝鏋滀綘鍚戯紝one-to-many绔坊鐨勯泦鍚堜腑錛宎dd涓涓?#8220;宸茬粡鎸佷箙鍖栦簡鐨勫璞?#8221;錛岄偅灝變笉浼氬嚭鐜皍pdate浜?鍥犱負宸茬粡鎸佷箙鍖栬繃浜?錛岄櫎闈烇紝浣犲幓 鏇存敼“閭d釜鎸佷箙鍖栧璞?#8221;鎵瀵瑰簲鐨勫閿傘傘傞偅鏍風殑璇濄傘傘傚懙鍛靛懙~~~
浣犲彲浠ヨ瘯涓璇曪紝搴旇涓嶄細鎶ラ敊錛屼綘鍙互褰撳仛緇冧範鍘誨仛涓涓嬶紝鍔犳繁cascade鍜宨nverse榪欎袱涓睘鎬х殑鐞嗚В錛?/span>
// 濡傛灉鐪嬫噦浜嗕笂闈㈢殑鍐呭銆傛潵鐪嬩竴涓嬶紝涓嬮潰鐨勪笢瑗褲?br style="line-height: normal; " />
鍋囧錛屽皢one-to-many绔?鍗?Class绔?鐨?hbm.xml 鏂囨。涓殑cascade縐婚櫎鎺?鎴栨妸cascade="none"銆?br style="line-height: normal; " />
閭d箞涓婇潰鐨勪唬鐮佷細鍑虹幇浠涔堟儏鍐靛憿銆?br style="line-height: normal; " />
緇撴灉浼氬嚭鐜?鏉QL錛屽拰涓鍫咵xception
insert into demo.class (cid, cname) values (66666666666666666666666666666666, 涓騫寸駭1鐝?
update demo.student set class_id=66666666666666666666666666666666 where sid=8888888888888888811cb2e04c888888
Hibernate Exceptinon......................................
鐩告瘮杈僣ascade琚緗?save-update"鐨勬椂鍊欙紝緙哄皯浜?鏉?insert璇彞錛岃屼笖涔熷浜嗕竴浜汦xception銆?/span>
閭d箞錛屽埌搴曟槸灝戜簡鍝?鏉nsert璇彞鍛紵
灝辨槸榪欐潯錛?br style="line-height: normal; " />
insert into demo.student (sid,sname,class_id) values (8888888888888888811cb2e04c888888, 灝忕櫧鍏? 66666666666666666666666666666666)
涔嬫墍浠ヤ細鍑虹幇錛岃繖鏍風殑鐜拌薄錛屾兂蹇呮偍宸茬粡鏃╁氨鐪嬪嚭鏉ヤ簡銆?br style="line-height: normal; " /> 鍥犱負錛屾垜娌℃湁璁劇疆Class绔殑Cascade錛屾墍浠ュ湪save(class)鐨勬椂鍊欙紝騫舵病鏈夎嚜鍔ㄥ皢鍏舵墍鍏寵仈鐨?#8220;鑷敱鎬佸璞?#8221;榪涜鎸佷箙鍖栨搷浣溿?br style="line-height: normal; " /> 鐒惰岋紝鍙堝洜涓?Class绔殑inverse=false錛屾墍浠ワ紝Class浼氳嚜鍔ㄥ幓緇存寔錛岄偅涓?“鏂版潵鐨剆tudent” 鐨勫閿?br style="line-height: normal; " /> 鎵浠ヤ細鍑虹幇錛屾病鏈塱nsert灝辮update鍟︺傘傘傘?br style="line-height: normal; " /> 鐒跺悗鍦ㄥ氨鏄疎xception浜?/span>