寤惰繜鍒濆鍖栭敊璇槸榪愮敤Hibernate寮鍙戦」鐩椂鏈甯歌鐨勯敊璇傚鏋滃涓涓被鎴栬呴泦鍚堥厤緗簡寤惰繜媯绱㈢瓥鐣ワ紝閭d箞蹇呴』褰撲唬鐞嗙被瀹炰緥鎴栦唬鐞嗛泦鍚堝浜庢寔涔呭寲鐘舵侊紙鍗沖浜嶴ession鑼冨洿鍐咃級鏃訛紝鎵嶈兘鍒濆鍖栧畠銆傚鏋滃湪娓哥鐘舵佹椂鎵嶅垵濮嬪寲瀹冿紝灝變細浜х敓寤惰繜鍒濆鍖栭敊璇?br />
涓嬮潰鎶奀ustomer.hbm.xml鏂囦歡鐨?lt;class>鍏冪礌鐨刲azy灞炴ц涓簍rue錛岃〃紺轟嬌鐢ㄥ歡榪熸绱㈢瓥鐣ワ細
<class name="mypack.Customer" table="CUSTOMERS" lazy="true">
褰撴墽琛孲ession鐨刲oad()鏂規硶鏃訛紝Hibernate涓嶄細绔嬪嵆鎵ц鏌ヨCUSTOMERS琛ㄧ殑select璇彞錛屼粎浠呰繑鍥濩ustomer綾葷殑浠g悊綾葷殑瀹炰緥錛岃繖涓唬鐞嗙被鍏風敱浠ヤ笅鐗瑰緛錛?br />
錛?錛?鐢盚ibernate鍦ㄨ繍琛屾椂鍔ㄦ佺敓鎴愶紝瀹冩墿灞曚簡Customer綾伙紝鍥犳瀹冪戶鎵夸簡Customer綾葷殑鎵鏈夊睘鎬у拰鏂規硶錛屼絾瀹冪殑瀹炵幇瀵逛簬搴旂敤紼嬪簭鏄忔槑鐨勩?br />錛?錛?褰揌ibernate鍒涘緩Customer浠g悊綾誨疄渚嬫椂錛屼粎浠呭垵濮嬪寲浜嗗畠鐨凮ID灞炴э紝鍏朵粬灞炴ч兘涓簄ull錛屽洜姝よ繖涓唬鐞嗙被瀹炰緥鍗犵敤鐨勫唴瀛樺緢灝戙?br />錛?錛夊綋搴旂敤紼嬪簭絎竴嬈¤闂瓹ustomer浠g悊綾誨疄渚嬫椂錛堜緥濡傝皟鐢╟ustomer.getXXX()鎴朿ustomer.setXXX()鏂規硶錛夛紝 Hibernate浼氬垵濮嬪寲浠g悊綾誨疄渚嬶紝鍦ㄥ垵濮嬪寲榪囩▼涓墽琛宻elect璇彞錛岀湡姝d粠鏁版嵁搴撲腑鍔犺澆Customer瀵硅薄鐨勬墍鏈夋暟鎹備絾鏈変釜渚嬪錛岄偅灝辨槸褰撳簲鐢ㄧ▼搴忚闂瓹ustomer浠g悊綾誨疄渚嬬殑getId()鏂規硶鏃訛紝Hibernate涓嶄細鍒濆鍖栦唬鐞嗙被瀹炰緥錛屽洜涓哄湪鍒涘緩浠g悊綾誨疄渚嬫椂OID灝卞瓨鍦ㄤ簡錛屼笉蹇呭埌鏁版嵁搴撲腑鍘繪煡璇€?br />
鎻愮ず錛欻ibernate閲囩敤CGLIB宸ュ叿鏉ョ敓鎴愭寔涔呭寲綾葷殑浠g悊綾匯侰GLIB鏄竴涓姛鑳藉己澶х殑Java瀛楄妭鐮佺敓鎴愬伐鍏鳳紝瀹冭兘澶熷湪紼嬪簭榪愯鏃跺姩鎬佺敓鎴愭墿灞?Java綾繪垨鑰呭疄鐜癑ava鎺ュ彛鐨勪唬鐞嗙被銆傚叧浜嶤GLIB鐨勬洿澶氱煡璇嗭紝璇峰弬鑰冿細http://cglib.sourceforge.net/銆?br />
浠ヤ笅浠g爜鍏堥氳繃Session鐨刲oad()鏂規硶鍔犺澆Customer瀵硅薄錛岀劧鍚庤闂畠鐨刵ame灞炴э細
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.getName();
tx.commit();
鍦ㄨ繍琛宻ession.load()鏂規硶鏃禜ibernate涓嶆墽琛屼換浣晄elect璇彞錛屼粎浠呰繑鍥濩ustomer綾葷殑浠g悊綾葷殑瀹炰緥錛屽畠鐨凮ID涓?錛岃繖鏄敱load()鏂規硶鐨勭浜屼釜鍙傛暟鎸囧畾鐨勩傚綋搴旂敤紼嬪簭璋冪敤customer.getName()鏂規硶鏃訛紝Hibernate浼氬垵濮嬪寲Customer浠g悊綾誨疄渚嬶紝浠庢暟鎹簱涓姞杞紺ustomer瀵硅薄鐨勬暟鎹紝鎵ц浠ヤ笅select璇彞錛?br />
select * from CUSTOMERS where ID=1;
select * from ORDERS where CUSTOMER_ID=1;
褰?lt;class>鍏冪礌鐨刲azy灞炴т負true錛屼細褰卞搷Session鐨刲oad()鏂規硶鐨勫悇縐嶈繍琛屾椂琛屼負錛屼笅闈婦渚嬭鏄庛?br />
1錛庡鏋滃姞杞界殑Customer瀵硅薄鍦ㄦ暟鎹簱涓笉瀛樺湪錛孲ession鐨刲oad()鏂規硶涓嶄細鎶涘嚭寮傚父錛屽彧鏈夊綋榪愯customer.getName()鏂規硶鏃舵墠浼氭姏鍑轟互涓嬪紓甯革細
ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.ObjectNotFoundException: No row with the given identifier exists: 1, of class:
mypack.Customer
2錛庡鏋滃湪鏁翠釜Session鑼冨洿鍐咃紝搴旂敤紼嬪簭娌℃湁璁塊棶榪嘋ustomer瀵硅薄錛岄偅涔圕ustomer浠g悊綾葷殑瀹炰緥涓鐩翠笉浼氳鍒濆鍖栵紝Hibernate涓嶄細鎵ц浠諱綍select璇彞銆備互涓嬩唬鐮佽瘯鍥懼湪鍏抽棴Session鍚庤闂瓹ustomer娓哥瀵硅薄錛?br />
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
tx.commit();
session.close();
customer.getName();
鐢變簬寮曠敤鍙橀噺customer寮曠敤鐨凜ustomer浠g悊綾葷殑瀹炰緥鍦⊿ession鑼冨洿鍐呭緇堟病鏈夎鍒濆鍖栵紝鍥犳鍦ㄦ墽琛宑ustomer.getName()鏂規硶鏃訛紝Hibernate浼氭姏鍑轟互涓嬪紓甯革細
ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed
鐢辨鍙錛孋ustomer浠g悊綾葷殑瀹炰緥鍙湁鍦ㄥ綋鍓峉ession鑼冨洿鍐呮墠鑳借鍒濆鍖栥?br />
3錛巒et.sf.hibernate.Hibernate綾葷殑initialize()闈欐佹柟娉曠敤浜庡湪Session鑼冨洿鍐呮樉寮忓垵濮嬪寲浠g悊綾誨疄渚嬶紝isInitialized()鏂規硶鐢ㄤ簬鍒ゆ柇浠g悊綾誨疄渚嬫槸鍚﹀凡緇忚鍒濆鍖栥備緥濡傦細
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
if(!Hibernate.isInitialized(customer))
Hibernate.initialize(customer);
tx.commit();
session.close();
customer.getName();
浠ヤ笂浠g爜鍦⊿ession鑼冨洿鍐呴氳繃Hibernate綾葷殑initialize()鏂規硶鏄懼紡鍒濆鍖栦簡Customer浠g悊綾誨疄渚嬶紝鍥犳褰揝ession鍏抽棴鍚庯紝鍙互姝e父璁塊棶Customer娓哥瀵硅薄銆?br />
4錛庡綋搴旂敤紼嬪簭璁塊棶浠g悊綾誨疄渚嬬殑getId()鏂規硶鏃訛紝涓嶄細瑙﹀彂Hibernate鍒濆鍖栦唬鐞嗙被瀹炰緥鐨勮涓猴紝渚嬪錛?br />
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
customer.getId();
tx.commit();
session.close();
customer.getName();
褰撳簲鐢ㄧ▼搴忚闂甤ustomer.getId()鏂規硶鏃訛紝璇ユ柟娉曠洿鎺ヨ繑鍥濩ustomer浠g悊綾誨疄渚嬬殑OID鍊鹼紝鏃犻渶鏌ヨ鏁版嵁搴撱傜敱浜庡紩鐢ㄥ彉閲?customer濮嬬粓寮曠敤鐨勬槸娌℃湁琚垵濮嬪寲鐨凜ustomer浠g悊綾誨疄渚嬶紝鍥犳褰揝ession鍏抽棴鍚庡啀鎵цcustomer.getName()鏂規硶錛?Hibernate浼氭姏鍑轟互涓嬪紓甯革細
ERROR LazyInitializer:63 - Exception initializing proxy
net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed
瑙e喅鏂規硶錛?br />
鐢變簬hibernate閲囩敤浜唋azy=true,榪欐牱褰撲綘鐢╤ibernate鏌ヨ鏃?榪斿洖瀹為檯涓哄埄鐢╟glib澧炲己鐨勪唬鐞嗙被,浣嗗叾騫舵病鏈夊疄闄呭~鍏?褰撲綘鍦ㄥ墠绔?鍒╃敤瀹冩潵鍙栧?getXXX)鏃?榪欐椂Hibernate鎵嶄細鍒版暟鎹簱鎵ц鏌ヨ,騫跺~鍏呭璞?浣嗘鏃跺鏋滃拰榪欎釜浠g悊綾葷浉鍏崇殑session宸插叧闂帀,灝變細浜х敓縐嶉敊璇?
鍦ㄥ仛涓瀵瑰鏃訛紝鏈夋椂浼氬嚭鐜?could not initialize proxy - clothe owning Session was sed,榪欎釜濂藉儚鏄痟ibernate鐨勭紦瀛橀棶棰?闂瑙e喅:闇瑕佸湪<many-to-one>閲岃緗甽azy="false". 浣嗘湁鍙兘浼氬紩鍙戝彟涓涓紓甯稿彨
failed to lazily initialize a collection of role: XXXXXXXX, no session or session was closed
姝ゅ紓甯歌В鍐蟲柟妗堣瀵熺湅鏈漢鍗氬錛坔ttp://hi.baidu.com/kekemao1錛夌殑Hibernate寮傚父涓殑銆奻ailed to lazily initialize a collection of role寮傚父銆?br />
?
瑙e喅鏂規硶:鍦╳eb.xml涓姞鍏?br /><filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
灝卞彲浠ヤ簡;
鍙傝冧簡:
Hibernate涓庡歡榪熷姞杞斤細
Hibernate瀵硅薄鍏崇郴鏄犲皠鎻愪緵寤惰繜鐨勪笌闈炲歡榪熺殑瀵硅薄鍒濆鍖栥傞潪寤惰繜鍔犺澆鍦ㄨ鍙栦竴涓璞$殑鏃跺欎細灝嗕笌榪欎釜瀵硅薄鎵鏈夌浉鍏崇殑鍏朵粬瀵硅薄涓璧瘋鍙栧嚭鏉ャ傝繖鏈夋椂浼氬鑷存垚鐧劇殑錛堝鏋滀笉鏄垚鍗冪殑璇濓級select璇彞鍦ㄨ鍙栧璞$殑鏃跺欐墽琛屻傝繖涓棶棰樻湁鏃跺嚭鐜板湪浣跨敤鍙屽悜鍏崇郴鐨勬椂鍊欙紝緇忓父浼氬鑷存暣涓暟鎹簱閮藉湪鍒濆鍖栫殑闃舵琚鍑烘潵浜嗐傚綋鐒訛紝浣犲彲浠ヤ笉鍘屽叾鐑﹀湴媯鏌ユ瘡涓涓璞′笌鍏朵粬瀵硅薄鐨勫叧緋伙紝騫舵妸閭d簺鏈鏄傝吹鐨勫垹闄わ紝浣嗘槸鍒版渶鍚庯紝鎴戜滑鍙兘浼氬洜姝ゅけ鍘諱簡鏈兂鍦∣RM宸ュ叿涓幏寰楃殑渚垮埄銆?br />
涓涓槑鏄劇殑瑙e喅鏂規硶鏄嬌鐢℉ibernate鎻愪緵鐨勫歡榪熷姞杞芥満鍒躲傝繖縐嶅垵濮嬪寲絳栫暐鍙湪涓涓璞¤皟鐢ㄥ畠鐨勪竴瀵瑰鎴栧瀵瑰鍏崇郴鏃舵墠灝嗗叧緋誨璞¤鍙栧嚭鏉ャ傝繖涓繃紼嬪寮鍙戣呮潵璇存槸閫忔槑鐨勶紝鑰屼笖鍙繘琛屼簡寰堝皯鐨勬暟鎹簱鎿嶄綔璇鋒眰錛屽洜姝や細寰楀埌姣旇緝鏄庢樉鐨勬ц兘鎻愬崌銆傝繖欏規妧鏈殑涓涓己闄鋒槸寤惰繜鍔犺澆鎶鏈姹備竴涓狧ibernate浼氳瘽瑕佸湪瀵硅薄浣跨敤鐨勬椂鍊欎竴鐩村紑鐫銆傝繖浼氭垚涓洪氳繃浣跨敤DAO妯″紡灝嗘寔涔呭眰鎶借薄鍑烘潵鏃剁殑涓涓富瑕侀棶棰樸備負浜嗗皢鎸佷箙鍖栨満鍒跺畬鍏ㄥ湴鎶借薄鍑烘潵錛屾墍鏈夌殑鏁版嵁搴撻昏緫錛屽寘鎷墦寮鎴栧叧闂細璇濓紝閮戒笉鑳藉湪搴旂敤灞傚嚭鐜般傛渶甯歌鐨勬槸錛屼竴浜涘疄鐜頒簡綆鍗曟帴鍙g殑DAO瀹炵幇綾誨皢鏁版嵁搴撻昏緫瀹屽叏灝佽璧鋒潵浜嗐備竴縐嶅揩閫熶絾鏄鎷欑殑瑙e喅鏂規硶鏄斁寮僁AO妯″紡錛屽皢鏁版嵁搴撹繛鎺ラ昏緫鍔犲埌搴旂敤灞備腑鏉ャ傝繖鍙兘瀵逛竴浜涘皬鐨勫簲鐢ㄧ▼搴忔湁鏁堬紝浣嗘槸鍦ㄥぇ鐨勭郴緇熶腑錛岃繖鏄竴涓弗閲嶇殑璁捐緙洪櫡錛屽Θ紕嶄簡緋葷粺鐨勫彲鎵╁睍鎬с?br />
鍦╓eb灞傝繘琛屽歡榪熷姞杞?br />
騫歌繍鐨勬槸錛孲pring妗嗘灦涓篐ibernate寤惰繜鍔犺澆涓嶥AO妯″紡鐨勬暣鍚堟彁渚涗簡涓縐嶆柟渚跨殑瑙e喅鏂規硶銆傚閭d簺涓嶇啛鎮塖pring涓嶩ibernate闆嗘垚浣跨敤鐨勪漢錛屾垜涓嶄細鍦ㄨ繖閲岃璁鴻繃澶氱殑緇嗚妭錛屼絾鏄垜寤鴻浣犲幓浜嗚ВHibernate涓嶴pring闆嗘垚鐨勬暟鎹闂備互涓涓猈eb搴旂敤涓轟緥錛孲pring鎻愪緵浜哋penSessionInViewFilter鍜孫penSessionInViewInterceptor銆傛垜浠彲浠ラ殢鎰忛夋嫨涓涓被鏉ュ疄鐜扮浉鍚岀殑鍔熻兘銆備袱縐嶆柟娉曞敮涓鐨勪笉鍚屽氨鍦ㄤ簬interceptor鍦⊿pring瀹瑰櫒涓繍琛屽茍琚厤緗湪web搴旂敤鐨勪笂涓嬫枃涓紝鑰孎ilter鍦⊿pring涔嬪墠榪愯騫惰閰嶇疆鍦╳eb.xml涓備笉綆$敤鍝釜錛屼粬浠兘鍦ㄨ姹傚皢褰撳墠浼氳瘽涓庡綋鍓嶏紙鏁版嵁搴擄級綰跨▼緇戝畾鏃舵墦寮Hibernate浼氳瘽銆備竴鏃﹀凡緇戝畾鍒扮嚎紼嬶紝榪欎釜鎵撳紑浜嗙殑Hibernate浼氳瘽鍙互鍦―AO瀹炵幇綾諱腑閫忔槑鍦頒嬌鐢ㄣ傝繖涓細璇濅細涓哄歡榪熷姞杞芥暟鎹簱涓煎璞$殑瑙嗗浘淇濇寔鎵撳紑鐘舵併備竴鏃﹁繖涓昏緫瑙嗗浘瀹屾垚浜嗭紝Hibernate浼氳瘽浼氬湪Filter鐨刣oFilter鏂規硶鎴栬匢nterceptor鐨刾ostHandle鏂規硶涓鍏抽棴銆備笅闈㈡槸姣忎釜緇勪歡鐨勯厤緗ず渚嬶細
Interceptor鐨勯厤緗?
<beans>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptor"/>
</list>
</property>
<property name="mappings">
</bean>
<bean name="openSessionInViewInterceptor"
class="org.springframework.orm.hibernate.support.OpenSessionInViewInterceptor">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
</beans>
Filter鐨勯厤緗?br />
<web-app>
<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>*. spring </url-pattern>
</filter-mapping>
</web-app>
瀹炵幇Hibernate鐨凞ao鎺ュ彛鏉ヤ嬌鐢ㄦ墦寮鐨勪細璇濇槸寰堝鏄撶殑銆備簨瀹炰笂錛屽鏋滀綘宸茬粡浣跨敤浜哠pring妗嗘灦鏉ュ疄鐜頒綘鐨凥ibernate Dao,寰堝彲鑳戒綘涓嶉渶瑕佹敼鍙樹換浣曚笢瑗褲傛柟渚跨殑HibernateTemplate鍏敤緇勪歡浣胯闂暟鎹簱鍙樻垚灝忚彍涓紕燂紝鑰孌AO鎺ュ彛鍙湁閫氳繃榪欎釜緇勪歡鎵嶅彲浠ヨ闂埌鏁版嵁搴撱備笅闈㈡槸涓涓ず渚嬬殑DAO錛?br />
public class HibernateProductDAO extends HibernateDaoSupport implements ProductDAO {
public Product getProduct(Integer productId) {
return (Product)getHibernateTemplate().load(Product.class, productId);
}
public Integer saveProduct(Product product) {
return (Integer) getHibernateTemplate().save(product);
}
public void updateProduct(Product product) {
getHibernateTemplate().update(product);
}
}
鍦ㄤ笟鍔¢昏緫灞備腑浣跨敤寤惰繜鍔犺澆
鍗充嬌鍦ㄨ鍥懼闈紝Spring妗嗘灦涔熼氳繃浣跨敤AOP 鎷︽埅鍣?HibernateInterceptor鏉ヤ嬌寰楀歡榪熷姞杞藉彉寰楀緢瀹規槗瀹炵幇銆傝繖涓狧ibernate 鎷︽埅鍣ㄩ忔槑鍦板皢璋冪敤閰嶇疆鍦⊿pring搴旂敤紼嬪簭涓婁笅鏂囦腑鐨勪笟鍔″璞′腑鏂規硶鐨勮姹傛嫤鎴笅鏉ワ紝鍦ㄨ皟鐢ㄦ柟娉曚箣鍓嶆墦寮涓涓狧ibernate浼氳瘽錛岀劧鍚庡湪鏂規硶鎵ц瀹屼箣鍚庡皢浼氳瘽鍏抽棴銆傝鎴戜滑鏉ョ湅涓涓畝鍗曠殑渚嬪瓙錛屽亣璁炬垜浠湁涓涓帴鍙ussinessObject錛?br />
public interface BusinessObject {
public void doSomethingThatInvolvesDaos();
}
綾籅usinessObjectImpl瀹炵幇浜咮usinessObject鎺ュ彛:
public class BusinessObjectImpl implements BusinessObject {
public void doSomethingThatInvolvesDaos() {
// lots of logic that calls
// DAO classes Which access
// data objects lazily
}
}
閫氳繃鍦⊿pring搴旂敤紼嬪簭涓婁笅鏂囦腑鐨勪竴浜涢厤緗紝鎴戜滑鍙互璁╁皢璋冪敤BusinessObject鐨勬柟娉曟嫤鎴笅鏉ワ紝鍐嶄護瀹冪殑鏂規硶鏀寔寤惰繜鍔犺澆銆傜湅鐪嬩笅闈㈢殑涓涓▼搴忕墖孌碉細
<beans>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="businessObjectTarget" class="com.acompany.BusinessObjectImpl">
<property name="someDAO"><ref bean="someDAO"/></property>
</bean>
<bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target"><ref bean="businessObjectTarget"/></property>
<property name="proxyInterfaces">
<value>com.acompany.BusinessObject</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
</list>
</property>
</bean>
</beans>
褰揵usinessObject琚皟鐢ㄧ殑鏃跺欙紝HibernateInterceptor鎵撳紑涓涓狧ibernate浼氳瘽錛屽茍灝嗚皟鐢ㄨ姹備紶閫掔粰BusinessObjectImpl瀵硅薄銆傚綋BusinessObjectImpl鎵ц瀹屾垚鍚庯紝HibernateInterceptor閫忔槑鍦板叧闂簡浼氳瘽銆傚簲鐢ㄥ眰鐨勪唬鐮佷笉鐢ㄤ簡瑙d換浣曟寔涔呭眰閫昏緫錛岃繕鏄疄鐜頒簡寤惰繜鍔犺澆銆?br />
鍦ㄥ崟鍏冩祴璇曚腑嫻嬭瘯寤惰繜鍔犺澆
鏈鍚庯紝鎴戜滑闇瑕佺敤J-Unit鏉ユ祴璇曟垜浠殑寤惰繜鍔犺澆紼嬪簭銆傛垜浠彲浠ヨ交鏄撳湴閫氳繃閲嶅啓TestCase綾諱腑鐨剆etUp鍜宼earDown鏂規硶鏉ュ疄鐜拌繖涓姹傘傛垜姣旇緝鍠滄鐢ㄨ繖涓柟渚跨殑鎶借薄綾諱綔涓烘垜鎵鏈夋祴璇曠被鐨勫熀綾匯?br />
public abstract class MyLazyTestCase extends TestCase {
private SessionFactory sessionFactory;
private Session session;
public void setUp() throws Exception {
super.setUp();
SessionFactory sessionFactory = (SessionFactory) getBean("sessionFactory");
session = SessionFactoryUtils.getSession(sessionFactory, true);
Session s = sessionFactory.openSession();
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(s));
}
protected Object getBean(String beanName) {
//Code to get objects from Spring application context
}
public void tearDown() throws Exception {
super.tearDown();
SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);
Session s = holder.getSession();
s.flush();
TransactionSynchronizationManager.unbindResource(sessionFactory);
SessionFactoryUtils.closeSessionIfNecessary(s, sessionFactory);
}
--------------------------------------------------------------
--------------------------------------------------------------
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping package="com.isoftstone.lms.model">
- <class name="Order" table="sv_order" >
- <id name="orderId" column="sv_order_id" type="string">
- <generator class="sequence">
- <param name="sequence">SEQ_ORDERID</param>
- </generator>
- </id>
-
- many-to-one name="style" column="sv_style_id" lazy="false" />
- <many-to-one name="state" column="sv_state_id" lazy="false"/>
- <many-to-one name="client" column="sv_client_id" lazy="false" />
- <many-to-one name="baseOrder" column="sv_order_baseid" lazy="false"/>
- <property name="orderNo" column="sv_order_orderno" type="long" />
- <property name="createDate" column="sv_order_createdate" type="date" />
- <property name="sendDate" column="sv_order_senddate" type="string" />
- <property name="sendAddress" column="sv_order_sendAddress" type="string" />
- <property name="accepter" column="sv_order_accepter" type="string" />
- <property name="postNo" column="sv_order_postNo" type="string" />
- <property name="phone" column="sv_order_phone" type="string" />
- <property name="totalMoney" column="sv_order_totalmoney" type="double" />
- <property name="isinvoice" column="sv_order_isinvoice" type="int" />
- <property name="remark" column="sv_order_remark" type="string" />
-
- <set name="orderGoodss" inverse="true" lazy="extra" cascade="all">
- <key column="sv_order_id"/>
- <one-to-many class="OrderGoods"/>
- </set>
- </class>
- </hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.isoftstone.lms.model">
<class name="Order" table="sv_order" >
<id name="orderId" column="sv_order_id" type="string">
<generator class="sequence">
<param name="sequence">SEQ_ORDERID</param>
</generator>
</id>
many-to-one name="style" column="sv_style_id" lazy="false" />
<many-to-one name="state" column="sv_state_id" lazy="false"/>
<many-to-one name="client" column="sv_client_id" lazy="false" />
<many-to-one name="baseOrder" column="sv_order_baseid" lazy="false"/>
<property name="orderNo" column="sv_order_orderno" type="long" />
<property name="createDate" column="sv_order_createdate" type="date" />
<property name="sendDate" column="sv_order_senddate" type="string" />
<property name="sendAddress" column="sv_order_sendAddress" type="string" />
<property name="accepter" column="sv_order_accepter" type="string" />
<property name="postNo" column="sv_order_postNo" type="string" />
<property name="phone" column="sv_order_phone" type="string" />
<property name="totalMoney" column="sv_order_totalmoney" type="double" />
<property name="isinvoice" column="sv_order_isinvoice" type="int" />
<property name="remark" column="sv_order_remark" type="string" />
<set name="orderGoodss" inverse="true" lazy="extra" cascade="all">
<key column="sv_order_id"/>
<one-to-many class="OrderGoods"/>
</set>
</class>
</hibernate-mapping>
[color=red]- <many-to-one name="style" column="sv_style_id" lazy="false" />
- <many-to-one name="state" column="sv_state_id" lazy="false"/>
- <many-to-one name="client" column="sv_client_id" lazy="false" />
- <many-to-one name="baseOrder" column="sv_order_baseid" lazy="false"/>
<many-to-one name="style" column="sv_style_id" lazy="false" />
<many-to-one name="state" column="sv_state_id" lazy="false"/>
<many-to-one name="client" column="sv_client_id" lazy="false" />
<many-to-one name="baseOrder" column="sv_order_baseid" lazy="false"/>
[/color]
]]>