鏃墮棿錛?007-05-11 浣滆咃細Patrick Linskey 嫻忚嬈℃暟錛? 81 鏈枃鍏抽敭瀛楋細EJB, Persistence, 鎸佷箙鍖?/a>, EJB3 |
|
銆銆鍑犱釜鏄熸湡浠ュ墠錛屾垜浠?#8220;JPA錛氬ソ涓庡潖”涓轟富棰樹富鍔炰簡涓嬈?緗戜笂鎶鏈氦嫻佷細銆傚畠鍙楀埌浜嗗箍娉涚殑鍏蟲敞錛屽洜姝わ紝鎴戞病鏈夎凍澶熺殑鏃墮棿鍦ㄨ繖涓椂闂寸┖妗g粨鏉熸椂瑙g瓟鎵鏈夐棶棰樸傝繖閲屽彧鍒楀嚭浜嗗鍏朵腑閮ㄥ垎闂鐨勭瓟澶嶃傛垜灝嗕笉鏂洿鏂拌繖綃囧崥瀹㈡枃绔狅紝灝介噺瑙g瓟鍏朵綑鐨勯棶棰樸?/p>
闂錛欵JB涓撳鍥㈤槦鏄浣曟憜鑴變簨鍔℃弿榪扮鐨勶紵
鍥炵瓟錛?/strong>鍦ㄤ細璇漛ean鍜屾秷鎭┍鍔╞ean涓紝鍙互閫氳繃鎻忚堪絎﹀拰娉ㄩ噴鏉ユ帶鍒朵簨鍔$殑琛屼負銆傛澶栵紝鎴戜滑灝嗛粯璁ょ殑浜嬪姟灞炴ф洿鏀逛負“REQUIRED”錛岃繖涓粯璁ゅ兼瘮浠ュ墠鐨勫?#8220;SUPPORTS”鏇村父鐢ㄣ傚洜姝わ紝瀹屽叏涓嶅繀涓轟笟鍔℃柟娉曢厤緗簨鍔¤涓恒?/p>
JPA瀹炰綋浠呬緵鏈湴浣跨敤錛岄噸鐐瑰叧娉ㄥ煙妯″瀷銆傚洜姝わ紝鏃犳硶鍦↗PA瀹炰綋涓婇厤緗簨鍔℃э紙鎴栬繙紼嬭竟鐣屾垨瀹夊叏鎬э級銆傝屾槸蹇呴』浣跨敤浼氳瘽bean
façade錛堟垨娑堟伅椹卞姩bean錛夛紝鎵嶅彲浠ラ氳繃EJB鍗忚浣跨敤榪欎簺瀹炰綋銆傞氬父鏉ヨ錛岃繖鏄竴浠跺ソ浜嬶紝閰嶇疆瀹夊叏鎬с佽繙紼嬪鐞嗗拰浜嬪姟鐨勭矑搴﹀簲璇ユ瘮鎸佷箙鍖栨暟鎹殑
綺掑害綺楀緢澶氥侸PA鐫閲嶅叧娉ㄦ寔涔呭寲鏁版嵁錛屼互鍙婁笌EJB鐨勫叾浠栭儴鍒嗗拰Java EE瑙勮寖闆嗘垚璧鋒潵鐓х鍏朵粬浼佷笟鍏蟲敞鐐廣?/p>
闂錛氭帹鑽愬涓婚敭浣跨敤“long”榪樻槸“Long”錛熷鏋滃厑璁鎬嬌鐢╪ull浣滀負鍊鹼紝灝嗕細濡備綍錛?/strong> 鍥炵瓟錛?/strong>榪欏疄闄呬笂鍙栧喅浜庢偍鐨勬暟鎹ā鍨嬨傚鏋滄偍鐨勬暟鎹ā鍨嬪厑璁鎬富閿負null錛岄偅涔堜嬌鐢↙ong錛屽鏋滄偍鐨勬暟鎹ā鍨嬭瀹氫富閿垪涓嶈兘涓簄ull錛屽垯浣跨敤long鏇村悎閫傘傛葷殑鏉ヨ錛屾垜璁や負瀵逛簬闈炲鍚堜富閿紝鍏佽null浣滀負鍚堟硶鍊煎鏄撲駭鐢熸販娣嗭紝鍥犳鎴戝懼悜浜庝嬌鐢╨ong錛岃屼笉鏄疞ong銆?/p>
闂錛氭偍璇碋JB 2.0涓嶆敮鎸佺戶鎵匡紝浣嗘槸鍙互鍦ㄥ嚑涓笉鍚屼綅緗紙榪滅▼/bean錛変嬌鐢ㄧ戶鎵匡紝鍙槸涓嶅湪鏈湴浣跨敤鑰屽凡銆傝瑙i噴涓涓嬨?/strong> 鍥炵瓟錛?/strong>鏍規嵁EJB 2.1瑙勮寖鐨勯檮褰旸3錛?/p>
褰撳墠鐨凟JB瑙勮寖鏈寚瀹氱粍浠剁戶鎵跨殑姒傚康銆?/p>
鍙︿竴鏂歸潰錛孞PA瑙勮寖紜疄瑙勫畾浜嗗疄浣撶戶鎵跨殑姒傚康銆傛垜浠凡緇忓鐞嗕簡EJB 2.1瑙勮寖涓寚鍑虹殑鍚勭闂鍜屽鏉傛э紝鐜板湪鍏佽瀹屽叏鐨勫鎬佹煡璇㈠拰鍏寵仈銆?/p>
闂錛欱EA璁″垝浠涔堟椂鍊欐敮鎸?鍙戝竷EJB3錛? WebLogic Server 10 Technology Preview 鏄畬鍏ㄧ鍚堣鑼冪殑Java EE 5搴旂敤鏈嶅姟鍣ㄣ傚畠鍖呮嫭瀹屾暣鐨凟JB3鏀寔銆俉ebLogic Server 10澶ф浜庝笁鏈堜笅鏃彂甯冦?/p>
姝ゅ錛?a target="_blank">Kodo 鏄畬鍏ㄧ鍚堣鑼冪殑鐢熶駭灝辯華JPA瀹炵幇錛屽茍涓斿凡緇忓彂甯冦?/p>
闂錛欽PA鏄惁鏀寔緇勫悎涓婚敭錛? 鍥炵瓟錛?/strong>JPA鏀寔鑷劧ID鍜岀粍鍚圛D錛屼互鍙婃暟鎹簱鎸囨淳鎴栧疄鐜版寚媧劇殑鏁板瓧鍊箋?/p>
闂錛氭槸鍚﹀瓨鍦⊿pring妯℃澘錛屽儚JDBC妯℃澘涓鏍峰彲浠ュ湪瀹瑰櫒澶栭儴浣跨敤錛? 鍥炵瓟錛?/strong>鏄殑錛孲pring 2鏈塉PA妯℃澘銆備絾鏄紝Spring
2鍙互瀵逛換浣曟爣璁扮潃@Repository鐨刡ean鎵цJPA寮傚父杞瘧銆傚洜姝わ紝鎬葷殑鏉ヨ錛屽浜庢柊鐨勫簲鐢ㄧ▼搴忥紝鏈濂界洿鎺ヤ嬌鐢↗PA
API錛岃屼笉鏄彟涓涓ā鏉垮眰銆傚浜庝嬌鐢ㄦā鏉垮拰姝e湪榪佺Щ鍒癑PA鐨勭幇鏈夊簲鐢ㄧ▼搴忔潵璇達紝浣跨敤妯℃澘鏂規硶姣旇緝鍚堢悊銆?/p>
姝ゅ錛屽彲浠ュ儚鍦↗ava EE鏈嶅姟鍣ㄤ腑涓鏍峰皢JPA鐨勬寔涔呭寲鍗曞厓閮ㄧ講鍒癝pring錛孲pring瀵笿PA瑙勮寖涓寚鍑虹殑EntityManager娉ㄥ叆鍜屾煡鎵炬湇浠庡鍣ㄨ鍒欍?/p>
闂錛欽PA鏄惁鏀寔JDK1.4錛?/strong> 鍥炵瓟錛?/strong>JPA闇瑕丣ava 5鎴栨洿鏂扮増鏈?/p>
闂錛氫嬌鐢ㄨ寖鍥存煡璇㈡椂錛屽畠鏄惁涔熶細榪斿洖緇撴灉鎬繪暟錛堜緥濡傦紝榪斿洖538欏圭粨鏋滀腑鐨?-10欏癸級錛?/strong> 鍥炵瓟錛?/strong>涓嶏紝瑕佹兂鑾峰緱鎬繪暟錛屽繀欏誨彂鍑哄彟澶栦竴涓煡璇€傞氱敤妯″紡鏄紝鍦ㄧ涓嬈℃墽琛屾悳绱㈡椂鑾峰緱鎬繪暟錛岀劧鍚庨氳繃欏甸潰嫻忚緇撴灉錛屽皢鎬繪暟瀛樺偍鍒版柟渚跨殑浣嶇疆錛堜細璇濈姸鎬併乧ookie絳夛級錛?/p>
闂錛氬叿鏈塉PA鍖呰鍣ㄧ殑Hibernate鏄笉鏄竴縐岴JB3瀹炵幇錛?/strong> 鍥炵瓟錛?/strong>JPA瑙勮寖鏄畬鏁寸殑EJB3瑙勮寖鐨勫瓙闆嗭紝鍥犳JPA瀹炵幇鏈韓涓嶆槸瀹屾暣鐨凟JB3瀹炵幇銆傛垜涓嶄簡瑙edHat鐨凟JB3瀹炵幇鐨勬儏鍐靛浣曘備絾錛孒ibernate鏄疛PA瀹炵幇銆?/p>
闂錛氫笌Hibernate鐩告瘮錛孞PA鏄笉鏄洿濂斤紵 鍥炵瓟錛?/strong>JPA鏄鑼冿紝鑰孒ibernate鏄疄鐜般傚洜姝わ紝榪欐槸涓嶅悓浜嬬墿鐨勬瘮杈冦傚彲浠ヨ偗瀹氾紝浣跨敤鏍囧噯API姣斾嬌鐢ㄤ笓鏈堿PI鏈夋洿澶氫紭鍔匡紝浣嗕笉瀛樺湪鐪熸鐨勫姡鍔褲?/p>
闂錛氭槸涓嶆槸涓嶅啀闇瑕佸涔犲拰浣跨敤Hibernate錛?/strong> 鍥炵瓟錛?/strong>瑙勮寖鍥㈤槦鍏充簬JPA
1鐨勭洰鏍囦箣涓鏄埗瀹氫竴涓彲浠ョ敱寰堝渚涘簲鍟嗗疄鐜扮殑API錛屽茍涓斿紑鍙戜漢鍛樺彲浠ョ紪鐮佹潵瀹炵幇璇PI錛岃屼笉鏄嬌鐢ㄧ鏈変緵搴斿晢鐗規湁鐨凙PI銆傛垜浠凡鎴愬姛瀹炵幇榪欎釜鐩?
鏍囷紝鍥犳鎮ㄥ彧闇浣跨敤渚涘簲鍟嗙壒鏈夌殑API鏉ヨ幏寰桱PA瑙勮寖娌℃湁瑙e喅浣嗘偍鐨勫簲鐢ㄧ▼搴忎腑闇瑕佺殑鍔熻兘銆傛垜鐨勫緩璁槸灝藉彲鑳藉湴浣跨敤JPA
API錛屼絾鏄綋闇瑕佷緵搴斿晢鍏紑浣嗘槸瑙勮寖涓病鏈夋彁渚涚殑鍔熻兘鏃訛紝鍒欎嬌鐢ㄤ緵搴斿晢鐗規湁鐨凙PI銆?/p>
渚嬪錛孫penJPA鎻愪緵浜嗕繚瀛樼偣鍔熻兘錛屼絾JPA瑙勮寖娌℃湁銆傚洜姝わ紝甯屾湜浣跨敤淇濆瓨鐐圭殑OpenJPA寮鍙戜漢鍛樺簲璇ュ浠g爜鐨勫ぇ閮ㄥ垎鍐呭浣跨敤JPA瑙勮寖錛岃屽熷姪OpenJPAEntityManager鏉ヨ緗拰綆$悊淇濆瓨鐐廣?/p>
闂錛氳鑼冩槸鍚﹁В鍐充簡緙撳瓨闂錛?/strong> 鍥炵瓟錛?/strong>JPA瑙勮寖娌℃湁瑙e喅浜岀駭緙撳瓨闂錛圗ntityManagerFactory-綰э級錛屼絾鏄彁渚涗簡瀹炵幇璇ョ紦瀛樺繀欏婚伒瀹堢殑涓浜涙暟鎹攣瀹氬拰涓鑷存ц鍒欙紝鍗充嬌鍦ㄥ惎鐢ㄧ紦瀛樻椂涔熸槸濡傛銆?/p>
鏈夊皯閲忎笌緙撳瓨鏈夊叧鐨勪富棰樺彲鑳戒細鍦ㄥ皢鏉ョ殑JPA瑙勮寖鐗堟湰涓В鍐籌紝浣嗘槸澶у鏁扮紦瀛樹富棰樹笉蹇呮寚瀹氳鍒欙紝榪欐牱錛屼笉鍚岀殑渚涘簲鍟嗗氨鍙互杞繪澗鍦板畬鎴愪笉鍚岀殑宸ヤ綔銆傛澶勫鍔犵殑鏈閲嶈鐨勫唴瀹規槸涓浜涘熀鏈紦瀛樻帶鍒禔PI錛屽鍥炴敹鏌愪簺瀵硅薄ID錛屾垨灝嗕竴浜涚粡甯歌闂殑ID鍥哄畾鍒扮紦瀛樹腑銆?/p>
闂錛氭棦鐒跺疄浣撶鐞嗗櫒鎵挎媴浜嗘墍鏈夌箒閲嶇殑宸ヤ綔璐熻澆錛岄偅涔堜細璇漛ean榪樻湁浠涔堜環鍊鹼紵 鍥炵瓟錛?/strong>EntityManager璐熻矗鍩熷璞℃ā鍨嬪拰鏁版嵁搴撲箣闂寸殑浜や簰錛屼絾鏄粛鐒跺湪浼氳瘽涓疄鐜板畨鍏ㄦс佷簨鍔℃帶鍒躲?
榪滅▼澶勭悊銆佹湁鐘舵佺殑涓存椂鏁版嵁瀛樺偍錛岃屾搷浣滃崟鍏冪紪紼嬫ā鍨嬫棤娉曡В鍐充互涓婇棶棰樸備細璇漛ean榪樻槸閮ㄧ講鍗曞厓鍜屽叕鐢ㄦ湇鍔¤竟鐣屻傚洜姝わ紝浼氳瘽bean鏄畾涔夋墍鏈変笟鍔′唬鐮?
鐨勫湴鏂廣傛崲鑰岃█涔嬶紝浼氳瘽bean鏄疎JB瀹瑰櫒鍏蟲敞鐨勶紝鑰孞PA瀹炵幇鏄湪浼氳瘽bean涓嬌鐢ㄧ殑銆?/p>
褰撶劧錛屾偍榪樺彲浠ョ洿鎺ヤ粠servlet鎴朖SP鎴栧叾浠栦換浣曞彲浠ヤ嬌鐢↗ava 5鐨勫湴鏂逛嬌鐢↗PA銆備絾鏄繖鏍風殑璇濓紝鎮ㄥ氨蹇呴』綆$悊鑷繁鐨勪簨鍔°佸鐞嗚嚜宸辯殑闆嗙兢鏈嶅姟鏁呴殰杞Щ銆佺鐞嗚嚜宸辯殑鏈嶅姟閲嶉儴緗茬瓑銆?/p>
鍘熸枃鍑哄錛?/strong>http://jroller.com/page/pcl?entry=jpa_the_good_the_bad 涓嬮潰鏄竴緇勫叧浜?a >“JPA錛氬ソ涓庡潖”緗戜笂鎶鏈氦嫻佷細 鐨勬洿澶氶棶絳斻傚敖綆′粛鏈夊皯閲忛棶棰樺皻鏈В絳旓紝浣嗘槸搴旇寰堝揩灝變細緇欏嚭銆?/p>
闂錛氱浉瀵逛簬EJB2鏉ヨ錛孍JB3鍙互澶勭悊澶氬皯涓茍鍙戜簨鍔★紵 鍥炵瓟錛?/strong>浠庣函浼氳瘽bean鐨勮鐐規潵璁詫紝鑷沖皯鍦╓ebLogic
Server涓紝騫跺彂浜嬪姟鐨勬暟鐩病鏈変粈涔堝樊鍒備篃灝辨槸錛屽鏋滃皢鎮ㄧ殑搴旂敤紼嬪簭浠嶦JB2浼氳瘽bean杞崲鍒癊JB3浼氳瘽bean錛屼絾鏄畬鍏ㄦ病鏈変慨鏀規寔涔呭寲鏈?
鍒訛紝鍙兘涓嶄細鍙戠幇閲嶅ぇ宸埆銆傝繖鏄洜涓篍JB3瑙勮寖瀵逛細璇漛ean閮ㄥ垎鐨勫ぇ澶氭暟鏇存敼鐫閲嶅疄鐜扮紪紼嬫ā鍨嬬殑鏀硅繘銆?/p>
浠庡疄浣揵ean鐨勮鐐規潵璁詫紝鎴戣涓哄浜庡ぇ澶氭暟搴旂敤紼嬪簭錛學ebLogic Server鐨凟JB 2.1鍜孞PA鏀寔鐨勫茍鍙戜簨鍔℃暟鐩浉鍚屻傛偍鍙兘鍙戠幇JPA瀵逛簬闈炰富閿殑鏌ヨ鏉ヨ錛屽彲浼哥緝鎬ф洿楂樸備竴鏃﹀紑濮嬮捇鐮擪odo鐨?閿佸畾緇?/a> 涔嬬被鐨勫姛鑳斤紝鍒欏浜庡浐瀹氱殑鍩熸ā鍨嬶紝鍙互浠庡熀浜嶫PA鐨勭郴緇熶腑鑾峰緱鏇村騫跺彂浜嬪姟銆?/p>
闂錛氬浣曚負AquaLogic DSP搴旂敤JPA錛?/strong> 鍥炵瓟錛?/strong>AquaLogic
DSP鐫閲嶅叧娉ㄥ鏁版嵁鐨勫閲嶅瓨鍌ㄨ闂紝騫跺皢鏁版嵁浣滀負鏁版嵁鏈嶅姟鎻愪緵錛岄氬父浣滀負XML鎴朣DO鍛堢幇榪欎簺鏁版嵁銆侸PA瑙勮寖鐫閲嶅叧娉ㄤ笌鏁版嵁瀛樺偍浜や簰鐨凧ava
API銆傚彲浠ヨ鎯籌紝JPA緇戝畾鍒癆quaLogic DSP錛屾垨SDO緇戝畾鍒癒odo浜у搧錛圔EA鐨凧PA瀹炵幇錛夈?/p>
闂錛欽PA鏄惁鏀寔鎯版у姞杞斤紵 鍥炵瓟錛?/strong>鏄殑銆傞粯璁ゆ儏鍐典笅錛孋ollection鍜孧ap綾誨瀷鐨勫瓧孌墊槸鎯版ф绱㈢殑錛岃屽叾浠栨墍鏈夊瓧孌甸兘鏄富鍔ㄨ幏鍙栫殑銆傞氳繃鍦ㄥ瓧孌電殑鎸佷箙鍖栨敞瑙d腑鎸囨槑“fetch”灞炴э紝鍙互鍩轟簬鍚勪釜瀛楁闈欐佸湴鎺у埗璇ヨ涓恒?/p>
闂錛氫粈涔堟槸瀹炵幇榪囩▼鐨勬渶浣充綅緗紝渚嬪錛屾鏌ヨ澶氱敤鎴峰強鍏跺笎鎴鳳紙鍦ㄩ摱琛屽簲鐢ㄧ▼搴忎腑錛変互浠樼粰鍒╂伅錛熸槸鍦ㄦ暟鎹簱鐨勫瓨鍌ㄨ繃紼嬩腑瀹炵幇錛岃繕鏄湪EJB涓嬌鐢↗PA瀹炵幇錛岃繕鏄悓鏃朵嬌鐢ㄨ繖涓ょ鏂瑰紡錛?/strong> 鍥炵瓟錛?/strong>鏍規嵁鎴戠殑緇忛獙錛岃繖瀹為檯涓婂彇鍐充簬緇勭粐鍥犵礌錛岃屼笉鏄叾浠栧洜绱犮備竴浜涘伐浣滃鏇村枩嬈㈠湪瀛樺偍榪囩▼涓繘琛屽ぇ閲忕紪鐮侊紝鑰屽彟涓浜涘垯鍠滄鍦↗ava涓疄鐜板叾涓氬姟閫昏緫銆傛瘡縐嶆柟娉曞悇鏈変紭鍔垮拰浠d環銆?/p>
灝界濡傛錛岃繕鏄湁涓浜涢棶棰樺彲淇冧嬌浠栦滑浼樺厛鑰冭檻鍏朵腑鐨勪竴縐嶇幆澧冦傚湪鎮ㄧ殑渚嬪瓙涓紝鍦ㄦ暟鎹簱涓墽琛屽ぇ閲忚綆楀彲鑳芥瘮灝嗘暟鎹姞杞藉埌鍐呭瓨涓洿蹇紝鍥犳浣跨敤瀛樺偍榪?
紼嬪彲鑳芥瘮杈冨悎鐞嗐傚彟涓鏂歸潰錛屾暟鎹簱鎵挎媴榪欎箞澶氳礋杞藉皢瀵硅搴旂敤紼嬪簭鐨勭敤鎴蜂駭鐢熻礋闈㈠獎鍝嶏紝鍥犳鏈濂戒粯鍑轟竴瀹氫唬浠瘋法緗戠粶鎷夊嚭榪欎簺鏁版嵁錛屼互渚垮皢璇ユ暟鎹簱鐢ㄤ綔涓ユ牸鐨?
瀛樺偍緋葷粺錛岃屼笉鏄綆楀紩鎿庛傛垨鑰咃紝濡傛灉搴旂敤紼嬪簭鐨勫叾浣欓儴鍒嗕富瑕佷嬌鐢↗PA錛屽垯閫傜敤鐨勮瘽錛屽彲鑳藉笇鏈涗嬌鐢↗PQL鐨勫ぇ鎵歸噺鏇存柊鍔熻兘鏉ヨ繘琛屾洿鏂般?/p>
闂錛氬鏋滀笉鍏堝皢鏁版嵁鍔犺澆鍒板唴瀛樹腑錛屾槸鍚﹀彲浠ユ墽琛屽ぇ鎵歸噺鏇存柊錛?/strong> 鍥炵瓟錛?/strong>鏄殑錛屽彲浠ラ氳繃JPQL鎵ц澶ф壒閲忔洿鏂板拰澶ф壒閲忓垹闄わ細 UPDATE Employee e SET e.salary = e.salary * 1.1 WHERE e.salary < 100000 闂錛氫綘浠Kodo JDO鏈変粈涔堣鍒掞紵JPA鏄惁浼氶氳繃瀹炵幇JDO鐨勬墍鏈夊姛鑳借屽皢鍏跺彇浠o紵濡傛灉鏄殑璇濓紝鏄惁瀛樺湪浠諱綍鏃墮棿琛紵濡傛灉涓嶆槸錛屼綘浠細涓嶄細緇х畫縐瀬鍦板紑鍙慗DO錛?/strong> 鍥炵瓟錛?/strong>BEA浠嶇劧瀹屽叏蹇犱簬JDO銆備粠瑙勮寖鐨勮鐐規潵鐪嬶紝鎴戣涓鴻繃涓孌墊椂闂翠箣鍚庯紝JPA灝嗗寘鍚綋鍓嶇殑JDO瑙勮寖涓秺鏉ヨ秺澶氱殑鍔熻兘銆備絾鏄紝鎴戜笉浜嗚ВSun瀵笿DO鍜孞PA涔嬮棿鐨勮瀺鍚堝伐浣滄湁浠涔堣鍒掋?/p>
闂錛氫粈涔堟槸鎸佷箙鍖栧崟鍏冿紵 鍥炵瓟錛?/strong>鎸佷箙鍖栧崟鍏冩槸綾誨拰閰嶇疆璁劇疆鐨勯泦鍚堬紝鍙互鏍規嵁璇ラ泦鍚堝垱寤篍ntityManagerFactory銆傚畠鍦?persistence.xml 鏂囦歡涓綔涓轟竴涓潯鐩嚭鐜般?/p>
闂錛氬浣曞湪WebLogic 9.2涓祴璇旿PA 鍥炵瓟錛?/strong>鐜板湪鍙互鍦╓ebLogic
9.2涓嬌鐢∣penJPA鎴朘odo銆傝鏈嶅姟鍣ㄤ笉鎵ц浼氳瘽bean鎸佷箙鍖栧崟鍏冩敞鍏ワ紝浣嗘槸鍦?0.0鏈嶅姟鍣ㄤ腑鍙互榪欎箞浣滐紝騫朵笖鍦?.2涓紝娌℃湁浠諱綍
Kodo鎺у埗鍙伴泦鎴愩備絾鏄櫎浜嗗紩瀵兼敞鍏ラ棶棰樹箣澶栵紝搴旇鑳藉鍦╓ebLogic 9.2涓垚鍔熷湴浣跨敤JPA錛屽寘鎷弬涓庢墭綆′簨鍔°?/p>
闂錛欽DBC榪炴帴瀵瑰簲浜嶫PA涓殑浠涔堟蹇碉紵 鍥炵瓟錛?/strong>JPA EntityManager澶ц嚧鐩稿綋浜嶫DBC榪炴帴錛岃孞PA
EntityManagerFactory浠庢蹇典笂綾諱技浜嶫DBC鏁版嵁婧愩侸PA EntityTransaction錛堜粎鍦↗TA /
appserver涓婁笅鏂囦互澶栧彲鐢級鐩稿綋浜嶫DBC榪炴帴鐨勪簨鍔℃帶鍒禔PI銆?/p>
鍦∣penJPA涓紝EntityManager鍦ㄥ叾鐢熷懡鍛ㄦ湡涓彲鑳戒嬌鐢ㄥ涓笉鍚岀殑JDBC榪炴帴銆傝鍙傞槄 openjpa.ConnectionRetainMode 灞炴х殑鏂囨。浜嗚В璇︾粏淇℃伅銆?/p>
闂錛氬叧浜巉etch綾誨瀷錛屽鏋滈粯璁ゆ槸涓誨姩錛坋ager錛夊姞杞斤紝鍒欐彁渚涚▼搴忓彲鑳藉拷鐣ユ儼鎬э紙lazy錛夊姞杞芥寚浠ゃ傚洜姝わ紝鍗充嬌灝嗗瓧孌佃緗負鎯版э紝涔熷彲鑳戒細鍔犺澆涓嶅繀瑕佺殑鏁版嵁銆傚皢鏉ョ殑瑙勮寖浼氫笉浼氬皢鍏朵慨鏀逛負蹇呴』涓巉ecth綾誨瀷涓鑷達紵榪欎細娑夊強鍒頒粈涔堥棶棰橈紵 鍥炵瓟錛?/strong>閫氬父錛孫penJPA姘歌繙涓嶄細蹇界暐鐢ㄦ埛閰嶇疆鐨凢etchMode銆傝繖鏄彁紺鴻屼笉鏄鍒欙紝鍥犱負鎯版у姞杞藉疄闄?
涓婃槸璋冧紭榪囩▼涓竴欏瑰叧娉ㄤ簨欏癸紝姘歌繙閮戒笉搴旇瀵瑰簲鐢ㄧ▼搴忎駭鐢熻涓烘х殑褰卞搷*銆侸PA瑙勮寖鍔涘浘閬垮厤瑕佹眰浣跨敤浠諱綍鏄庣‘鐨勬ц兘璋冧紭絳栫暐錛屽洜涓轟笉鍚岀殑緗戠粶鎷撴墤緇撴瀯銆?
鏁版嵁瀛樺偍緋葷粺鍜屽簲鐢ㄧ▼搴忚涓洪渶瑕佷笉鍚岀殑璋冧紭鍏蟲敞銆?/p>
渚嬪錛孫penJPA鍏佽鍦ㄨ繍琛屾椂 鍔ㄦ佹帶鍒?/a> fetch閰嶇疆銆傝繖鎰忓懗鐫錛屽畠鍙兘闈欐佸湴閰嶇疆瀵硅薄妯″瀷錛屼嬌鏌愪簺瀛楁榪涜鎯版у姞杞斤紝鐒跺悗鍔ㄦ佸湴灝嗗叾涓竴涓瓧孌墊坊鍔犲埌褰撳墠鐨刦etch璁″垝銆傝繖灝嗗鑷碠penJPA榪濆弽闈欐佸畾涔夌殑鎯版ц緗?/p>
鍦ㄥ綋澶╃粨鏉熸椂錛屽鏋滃疄鐜板鏁版嵁鍔犺澆鎵ц閿欒鐨勬搷浣滐紝鎮ㄥ簲鑳藉闈炲父杞繪澗鍦拌瘎浼板叾浠栧疄鐜幫紝閫氳繃濞佽儊杞Щ鍒板彟涓涓疄鐜幫紝浠ヨ嚦灝戣幏寰楁墍闇鐨勫姛鑳姐傝繖鏄澶ч噺渚涘簲鍟嗛噰鐢↗PA瑙勮寖鐨勯噸澶т紭鍔夸箣涓銆?/p>
*褰撶劧錛屽鏋滄偍渚濋潬鎯版у姞杞借緗潵闃叉鍔犺澆鏌愪簺鏁版嵁錛屼互鍏嶅悗鏉ヤ紶杈撳埌涓嶅悓鐨勫眰錛堜篃灝辨槸涓轟簡鏁版嵁瀹夊叏鎬э級錛岄偅涔堟儼鎬у姞杞藉瓨鍦ㄩ噸瑕佺殑琛屼負鎬у獎鍝嶃傚湪OpenJPA涓紝鍙互浣跨敤 fetch緇?/a> 鎺у埗閫氳繃鐢電紗鍙戦佹暟鎹浘鏃剁‘鍒囧湴鍒嗙鍝簺鏁版嵁銆?/p>
闂錛氬湪榪愯鏃舵洿鏀筬etch妯″紡瀹逛笉瀹規槗錛?/strong> 鍥炵瓟錛?/strong>JPA瑙勮寖娌℃湁涓烘鎻愪緵浠諱綍宸ュ叿銆侽penJPA閫氳繃 fetch瑙勫垝 鎺ュ彛鎻愪緵浜嗗fetch鐗瑰緛鐨勮緇嗘帶鍒躲侸PQL鐨?#8220;JOIN FETCH”緇撴瀯涔熷彲浠ョ敤浜庨檺鍒朵富鍔╢etch鎻愮ず銆?/p>
闂錛氫嬌鐢ㄤ箰瑙傞攣瀹氭椂錛孈Version娉ㄩ噴浠呮敮鎸乮nt瀛楁鍚楋紝瀹冨彲浠ユ槸datetime鍚楋紵 鍥炵瓟錛?/strong>鏍規嵁JPA鐨勮姹傦紝@Version鍙互瀵筰nt銆乴ong銆乻hort銆両nteger銆丼hort銆丩ong鍜孴imestamp綾誨瀷鐨勫瓧孌典嬌鐢ㄣ傦紙JPA瑙勮寖鐨勭9.1.17灝忚妭錛夈?/p>
闂錛氬湪JPA鍙互璋冪敤瀛樺偍榪囩▼鍚楋紵 鍥炵瓟錛?/strong>JPA瑙勮寖浠呰姹傛敮鎸丼ELECT
SQL璇彞錛堥氳繃EntityManager.createNativeQuery()璋冪敤錛屾垨@NamedNativeQuery娉ㄨВ鎴杗amed-
native-query XML鍏冪礌錛夈備絾鏄紝鎴戣涓哄ぇ澶氭暟瀹炵幇涔熷灝戞敮鎸佷互鐩稿悓鏂瑰紡璋冪敤瀛樺偍榪囩▼銆?/p>
闂錛氬湪EJB3涓紝鏇存柊瀹炰綋bean鐨勫崟涓瓧孌?鍒椾細瀵艱嚧鏇存柊璇B琛屼腑鐨勬墍鏈夊瓧孌?鍒楋紝榪樻槸浠呮洿鏂拌DB琛屼腑鏇存敼鐨勫垪錛?/strong> 鍥炵瓟錛?/strong>璇ヨ涓哄彇鍐充簬瀹炵幇銆侽penJPA灝嗗彧鏇存柊琚慨鏀瑰瓧孌靛搴旂殑鍒椼備絾鏄紝鎴戜滑鍙兘鍦ㄦ煇浜涗綅緗坊鍔爑pdate-all-columns閫夐」銆傝鍙傞槄 OPENJPA-38銆?/p>
闂錛欵JB3.0濡備綍鏇挎崲EJB2.0涓殑ejbLoad()銆乪jbStore()涔嬬被鐨勫洖璋冩柟娉曪紵 鍥炵瓟錛?/strong>JPA瑙勮寖鎻愪緵浜嗕竴浜涘彲浠ラ殢鎰忥紙鍗曚釜錛夊疄鐜扮殑 鍥炶皟鏂規硶銆?/p>
闂錛欵JB3.0濡備綍鏇挎崲EJB2.0 CMP鍜孊MP錛?/strong> 鍥炵瓟錛?/strong>EJB3 JPA瑙勮寖瀵笶JB2 CMP鎻愪緵浜嗗姛鑳藉畬鍠勭殑鏇挎崲銆侸PA瑙勮寖娌℃湁瑙e喅bean綆$悊鐨勬寔涔呭寲錛屽鏋滄偍甯屾湜瀹炵幇鑷繁鐨勬寔涔呭寲錛屽簲璇ョ戶緇嬌鐢˙MP錛屾垨鑰呮渶濂戒嬌鐢ㄤ細璇漛ean façade榪涜鑷畾涔夋寔涔呭寲銆?/p>
闂錛氬懡鍚嶆煡璇㈠彲浠ヤ綅浜嶫PA瀹炰綋浠ュ鍚楋紵灝卞儚鍦ㄤ細璇漛ean鎴栧府鍔╃被涓偅鏍鳳紵 鍥炵瓟錛?/strong>JPA瀹炵幇浠呮壂鎻忓疄浣撶被錛堝拰鏄犲皠瓚呯被浠ュ強宓屽叆綾伙級鏉ユ煡鎵懼懡鍚嶆煡璇€傛垜甯屾湜灝嗘潵鐨凧PA瑙勮寖鐗堟湰鎻愪緵涓縐嶆柟寮忥紝鐢ㄤ簬灝嗗懡鍚嶆煡璇㈤檺鍒跺埌涓涓被瀵硅薄涓紝鍒伴偅涓椂鍊欙紝灝卞彲浠ヨ涓鴻兘澶熷湪浠諱綍浣嶇疆瀹氫箟鍛藉悕鏌ヨ銆?/p>
鍙互鍦╫rm.xml鏂囦歡涓畾涔夊懡鍚嶆煡璇紝鐒跺悗浣挎偍鐨勬寔涔呭寲鍗曞厓鎸囧悜璇rm.xml鏂囦歡錛孞PA瑙勮寖鍏佽灝嗕換鎰忔暟鐩殑orm.xml鏂囦歡鍚堝茍鍒頒竴璧楓?/p>
闂錛欽PQL鏀寔澶氭暟鎹簱鏌ヨ鍚楋紵 鍥炵瓟錛?/strong>JPA瑙勮寖騫朵笉瑕佹眰瀹炵幇蹇呴』鍙嬌鐢ㄥ崟涓暟鎹簱錛堢敋鑷沖疄鐜板繀欏諱嬌鐢ㄥ叧緋繪暟鎹簱錛夈傚洜姝ゅ疄鐜板彲浠ラ殢鎰忔彁渚涘澶氫釜鏁版嵁搴撶殑璁塊棶銆備絾鏄紝鎹垜鎵鐭ワ紝褰撳墠鐨凧PA瀹炵幇閮芥病鏈夎繖涔堜綔錛岄櫎闈炴槸閫氳繃鏁版嵁搴撴柟鐨勫伐浣滄潵瀹炵幇澶氭暟鎹簱鏌ヨ銆?/p>
闂錛氬湪JPQL涓紝SELECT瀛愬彞鍙互浠庡涓疄浣撲腑鎷夊嚭鏁版嵁鍚楋紵 鍥炵瓟錛?/strong>鏄殑銆侸PQL璇█鍏佽鏌ヨ鑱氬悎鍜屾姇褰便傚洜姝や互涓嬭鍙ユ槸鏈夋晥鐨凧PQL璇彞錛?/p>
select p.name, p.contactInfo.phoneNumber from Person p select p.address.state, avg(p.salary) from Person p group by p.address.state 闂錛欽PA瑙勮寖鏄惁瑙e喅浜嗙紦瀛橀棶棰橈紵 鍥炵瓟錛?/strong>JPA瑙勮寖浠呰В鍐崇粰瀹欵ntityManager鐩稿叧瀵硅薄鐨勪簨鍔″伐浣滈泦鐨勮涓恒傚畠縐頒箣涓?#8220;鎸佷箙鍖栦笂涓嬫枃”銆備粠鏌愪簺鏂歸潰鏉ヨ錛岃繖鏄竴涓紦瀛橈紝浣嗛氬父鏄負浜嗕繚鎸佷簨鍔′竴鑷存э紝鑰屼笉鏄負浜嗘ц兘鐨勫師鍥犮?/p>
JPA瑙勮寖娌℃湁瑙e喅鎬ц兘緙撳瓨錛屽OpenJPA鐨?鏁版嵁緙撳瓨 鍜?鏌ヨ緙撳瓨銆備絾鏄鑼冧腑鐨勮鍒欏榪欑被鎬ц兘緙撳瓨鏆楃ず浜嗘煇浜涜涓虹害鏉熴?/p>
鎬昏岃█涔嬶紝JPA瑙勮寖涓昏鍏蟲敞鐨勪粎鏄疉PI鐨勮涓烘柟闈紝鑰岀敱鍚勭瀹炵幇瀹屾垚澶у鏁版ц兘鏈夊叧鐨勮皟浼樸傚敖綆″姝わ紝鎵鏈夊彲闈犵殑瀹炵幇閮藉簲璇ユ嫢鏈夋煇縐嶆暟鎹紦瀛橈紝浠ヤ綔涓洪夋嫨銆?/p>
闂錛歐ebLogic Server 9.0浠嶇劧浠呮敮鎸丒JB2.0錛屾槸鍚楋紵 鍥炵瓟錛?/strong>姝g‘銆俉ebLogic Server 10.0鏄畬鍏ㄦ敮鎸丒JB3瑙勮寖鐨勭涓嬈綛EA浜у搧銆傚湪WebLogic Server 9涓彲浠ラ氳繃BEA Kodo浜у搧鏉ヤ嬌鐢↗PA銆?/p>
闂錛氬叧浜嶫PA鐨勬帹鑽愭暀紼嬫槸浠涔堬紵 鍥炵瓟錛?/strong>Kodo鏂囨。 涓彁渚涗簡璁稿JPA鏁欑▼銆?/p>
闂錛?strong>鏄惁瀛樺湪浠諱綍鏂瑰紡錛岀敤浜庤法鎵鏈夊疄浣撹〃閰嶇疆琛ㄥ墠緙錛?/strong> 鍥炵瓟錛欽PA瑙勮寖涓病鏈夋彁渚涜繖縐嶆柟寮忥紝鍦∣penJPA涓紝鍙互閫氳繃鍒涘緩鎵╁睍鐨?DBDictionary 騫墮噸鍐檊etValidTableName()鏂規硶鏉ュ疄鐜拌鍔熻兘銆?/p>
闂錛氭槸鍚﹀彲鑳介氳繃緙栫▼淇敼ORM緇戝畾錛堝閲嶅啓orm.xml涓寚瀹氱殑涓浜汷RM閰嶇疆錛夛紵 鍥炵瓟錛?/strong>涓嶆槸閫氳繃JPA瑙勮寖瀹炵幇鐨勩侽penJPA鎻愪緵浜嗕竴浜涙柟娉曪紝鐢ㄤ簬浠ョ紪紼嬬殑鏂瑰紡鍒涘緩鏄犲皠淇℃伅錛屽茍涓旇瑙勮寖紜疄鎻愪緵浜嗕竴縐嶆柟娉曪紝鐢ㄤ簬鍦ㄥ垱寤篍ntityManager鏃訛紝灝嗙壒瀹氫簬渚涘簲鍟嗙殑閲嶅啓鍐呭浼犻掔粰persistence.xml涓殑鏁版嵁銆?/p>
闂錛氭垜浠鍦ㄦ瀯寤轟竴涓ぇ鍨嬪簲鐢ㄧ▼搴忥紝鍏朵腑鏈?50涓璞″潥鎸丣PA瑙勮寖銆傚綋鎴戜滑浣跨敤Kodo
4.1鎸佷箙鍖栬繖浜涘璞℃椂錛屽畠鐨凷ELECT鏌ヨ鏈緇堝皢姣忎釜鏌ヨ鐨勫ぇ澶氭暟琛ㄨ繛鎺ヨ搗鏉ワ紝榪欎嬌寰桲odo鐩稿綋鎱€俆opLink
Essentials瀹炵幇浠呰繛鎺ュ皯閲忕殑鐩稿叧琛ㄣ傛偍瀵硅В鍐寵闂鏈変粈涔堝緩璁紵 鍥炵瓟錛?/strong>鎴戣涓鴻繖涓?#8220;涓瀵逛竴”鍜?#8220;澶氬涓”瀛楁綾誨瀷鐨勪笉鍚岄粯璁よ涓烘湁鍏熾傛垜鐚滄兂錛屽鏋滄偍鏄庣‘鍦板憡鐭odo瀵?#8220;涓
瀵逛竴”鍜?#8220;澶氬涓”瀛楁綾誨瀷鎵ц鎯版у姞杞斤紝灝變細寰堟竻妤氥傚鏋滆繖涓嶈搗浣滅敤錛屾垨鑰呭鏋滄偍甯屾湜鑾峰緱鏇村甯姪鏉ュ垎鏋愭偍鐨勫叿浣撶敤渚嬶紝璇峰彂閫佺數瀛愰偖浠跺埌
plinskey@bea.com銆?/p>
闂錛氬紑鍙戜漢鍛樺彲浠ヤ嬌鐢↗PA鏉ユ帶鍒惰〃鐨勮繛鎺ユ柟寮忓悧錛?/strong> 鍥炵瓟錛?/strong>涓嶈兘鐩存帴鎺у埗錛屽茍涓斾笉鏄氳繃瑙勮寖瀹炵幇鐨勩備絾鏄紝澶у鏁板疄鐜板彲鑳芥彁渚涗簡涓浜涙柟寮忔潵褰卞搷濡備綍榪炴帴銆傛湁鍏砄penJPA鐨勮緇嗕俊鎭紝璇峰弬闃呭叧浜?涓誨姩fetching 鐨勬枃妗c?/p>
闂錛氬湪浣曞鎸囧畾鏁版嵁婧愶紵 鍥炵瓟錛?/strong>鏁版嵁婧愰氬父鏄湪persistence.xml涓寚瀹氱殑錛屾牴鎹偍鐨勫疄鐜板拰搴旂敤鏈嶅姟鍣ㄧ殑榛樿琛屼負錛屽彲鑳介渶瑕佷負jta-data-source鍜?鎴杗on-jta-data-source璁劇疆鎻愪緵鍊箋?/p>
闂錛欽PA瑙勮寖鏄惁璁″垝鍦ㄥ皢鏉ユ敮鎸侀噷紼嬬鎴栧弻鏃舵侀摼錛坆i-temporal錛夛紵 鍥炵瓟錛?/strong>鎹垜鎵鐭ワ紝JPA瑙勮寖鍥㈤槦鐩墠娌℃湁璁″垝鎻愪緵浠諱綍鏃舵佸姛鑳姐?/p>
闂錛氬鏋滄姏鍑轟箰瑙傞攣瀹氬紓甯革紝鍙互浜嗚В鍝簺鍒楀彂鐢熷啿紿佸悧 鍥炵瓟錛?/strong>涓嶅彲浠ャ傛偍鍙互浜嗚В鍝簺瀹炰緥澶辮觸錛屼絾涓嶆槸瀛楁銆傜粰瀹氬け璐ョ殑瀹炰緥錛屽緢瀹規槗浠庢暟鎹簱涓姞杞芥柊鍊鹼紝騫惰繘琛屾瘮杈冦?/p>
鍘熸枃鍑哄錛?/strong>http://jroller.com/page/pcl?entry=more_webinar_questions_and_answersif (isFirstPage()) { // this is the first time we're executing this query
Query q = em.createQuery("SELECT COUNT(p) FROM Product p WHERE ...");
long count = ((Long) q.getSingleResult()).longValue();
// store count somewhere stateful
}
Query q = em.createQuery("SELECT p FROM Product p WHERE ...");
q.setFirstResult(page * PAGE_SIZE); // page is stored somewhere stateful
q.setMaxResults(PAGE_SIZE);
鍏充簬緗戜笂鎶鏈氦嫻佷細鐨勬洿澶氶棶絳?/span>
鏃墮棿錛?007-05-13
浣滆咃細Patrick Linskey
嫻忚嬈℃暟錛?
20
鏈枃鍏抽敭瀛楋細EJB, Persistence, 鎸佷箙鍖?/a>, EJB3
鏂囩珷宸ュ叿
鎺ㄨ崘緇欐湅鍙?/a>
鎵撳嵃鏂囩珷
]]>