锘??xml version="1.0" encoding="utf-8" standalone="yes"?> customer Bill Burker 鏁版嵁搴撴病鏈夊惎鍔ㄦ椂浼氬嚭鐜板涓嬪紓甯?persistence.xml閰嶇疆閿欒涔熶細鍑虹幇,濡傚笎鎴鳳紝瀵嗙爜閿欒 org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)] 閿欒瑙e喅鏂規 榪戞棩鍦ㄨ繍琛屼竴涓狤JB3 Entity瀹炰緥錛堜竴瀵瑰鍏崇郴錛夋椂鎬婚亣鍒板涓嬪紓甯革紝涔呰瘯涓嶈兘淇銆?/font> javax.persistence.PersistenceException: org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)] ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 閫氳繃google鏌ユ壘闂鍘熷洜鏃跺彂鐜版槸Hibenate鐨勪竴涓猙ug錛堝鏂囩綉绔欎笂鏄繖涔堣鐨勶紝鎴戝茍涓嶈涓烘槸Hibernate鐨勫師鍥狅級銆傞渶瑕佹妸 @Id 鍐欏埌public int getId() {return this.id; }鏂規硶鐨勪笂闈€備笉鑳藉儚涔︿腑渚嬪瓙閭f牱鍐欏湪private int id;鐨勪笂闈€?/font> 濡傚嚭鐜頒互涓嬪紓甯革細 Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory] 璇鋒煡鐪嬫槸鍚﹀皢JBOSS_Home涓媍lient鏂囦歡澶逛腑鐨勬墍鏈塲ar鍖呴兘瀵煎叆鍒頒簡欏圭洰宸ョ▼涓?/span>
2銆丠ibrenate淇濆瓨鏁版嵁澶辮觸
new hbm.pojo.StudySubjectDAO().merge(subject);
HibernateSessionFactory. getSession().flush();
HibernateSessionFactory. getSession().getTransaction().commit();
3銆丠ibernate涓瀵瑰鐨勯厤緗?
鏈濂戒嬌鐢ㄥ弻鍚戝叧鑱旓紙鍋囪Main->Detail錛?br />
1錛塎ain.java涓姞鍏ワ細
private Set< Detail > detail=new HashSet();
鐒跺悗鍔犲叆get()鍜宻et()鏂規硶錛?br />
2錛塂etail.java涓姞鍏ワ細
private Main main錛?br />
鐒跺悗鍔犲叆get()鍜宻et()鏂規硶錛涘彟澶栧埆蹇樹簡閲嶅啓equals()鏂規硶
public boolean equals(Object object) {
if (object == null || !this.getClass().equals(object.getClass())) {
return false;
}
Detail other = (Detail)object;
if(other.id==null||this.id==null)
return false;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id)))
return false;
return true;
}
3錛塎ain.hbm.xml涓姞鍏ワ細
<set name="detail" inverse="true" cascade="all">
<key column="mainId"></key>
<one-to-many class=" Detail"/>
</set>
4)Detail.hbm.xml涓姞鍏ワ細
<many-to-one name=" main " class=" Main" column=" mainId">
</many-to-one>
鍚屾椂鎶妋ainId瀵瑰簲鐨?/span><property>……</property>鍒犳帀
5錛夋搷浣滐細
鍙屽悜璁劇疆錛氾紙璋冪敤setMain()setDetail()錛?/span>
4銆丒JB涓殑getSingleResult()鏂規硶
鏌ユ壘榪斿洖涓涓粨鏋?鏄敮涓鐨勪竴涓粨鏋滐紝褰揼etSingleResult()涓柟娉曡璋冪敤鏃舵墽琛屾煡璇€傚鏋滄病鏈夌粨鏋滆繑鍥?榪欎釜鏂規硶灝嗕細鎶涘嚭javax.persistence.EntityNotFoundException榪愯寮傚父.濡傛灉鎵懼埌澶氫簬涓涓粨鏋? javax.persistence.NonUniqueResultException寮傚父灝嗕細鍦ㄨ繍琛屾湡闂存姏鍑?鍥犱負榪欎袱涓紓甯擱兘鏄疪untimeException,渚嬪瓙涓殑浠g爜涓嶉渶瑕佸畬鏁寸殑try/catch鍧椼?br />
5銆丠ibernate3鐨勮В鍐充腑鏂囨煡璇㈤棶棰?
鍙互浣跨敤鍗犱綅絎︽垨鑰呰緗弬鏁扮殑鏂規硶鏉ユ煡璇紝渚嬪錛?br />
1)Query query=em.createQuery("select u from User u where u.name like ? ");
query.setString(0,"%"+myName+"%");
2)Query query=em.createQuery("select u from User u where u.name like :name");
query.setString("name","%"+myName+"%");
6銆丩ike鐨勫叾浠栫敤娉曪紙姝e垯錛?
7銆佷竴瀵瑰(one-to-many)鍒犻櫎涓嶆帀
姣斿Main-to-Detail鏄痮ne-to-many鍏崇郴錛屽湪鏂板鐨勬椂鍊欏彲浠ラ氳繃persistMain()鍚屾椂鎶婂涓狣etail鎻掑叆鏁版嵁搴擄紝浣嗘槸濡傛灉鎯沖垹闄ゆ煇涓狹ain涓殑鏌愬嚑涓狣etail鏃訛紝濂藉儚閫氳繃mergeMain()鏄棤娉曞仛鍒扮殑錛岄氳繃mergeMain()鍙互鏇存柊Main鐨勫睘鎬э紝浣嗘槸娌″姙娉曞垹闄ょ浉搴旂殑Detail錛岃嚦灝戞垜鏄病鍔炴硶鍋氬埌銆傝繖鏃訛紝鎴戜竴鍗婇兘鏄啓涓柟娉曞崟鐙潵鍒犻櫎Detail錛屼緥濡俤eleteDetailById()鏉ヤ竴涓釜鍒犻櫎銆?br />
8銆佹煡璇㈣繑鍥炲涓疄浣揃ean
@PersistenceContext(unitName="crm")
private EntityManager em;
public List getUserinfoTrace(){
return em.createQuery("select new List(u,t) from Userinfo u,Trace t where u.id=t.id").getResultList();
}
2)璇誨彇(鐪佺暐鍚庣殑浠g爜)
List<List> result=(List<List>)remote.getUserinfoTrace();
for(List obj:result){
Userinfo userinfo=(Userinfo)result.get(0);
Trace trace=(Trace)result.get(1);
……
}
9銆佽緗甀D鑷
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
10銆乫ailed to lazily initialize a collection of role
鍥犱負寤惰繜鍔犺澆瀵艱嚧鐨勶紝浣嗘槸鎴戝湪EntityBean涓嬌鐢╢etch=FetchType.EAGER鍜孎etchType.LAZY閮芥棤鏁堬紝鎴戠殑EntityBean鏄疈OneToMany錛屾渶鍚庡彧鏈夊湪SessionBean鐨勮鍙朎ntityBean鐨勬柟娉曚腑鍔犲叆錛?
main.getDetails().size();
return main;
]]>
EJB3鐨勬煡璇㈣璦鏄竴縐嶅拰SQL闈炲父綾諱技鐨勪腑闂存у拰瀵硅薄鍖栨煡璇㈣璦銆傚畠鍙互琚紪璇戞垚涓嶅悓鐨勫簳灞傛暟鎹簱鑳芥帴鍙楃殑SQL錛屼粠鑰屽睆钄戒笉鍚屾暟鎹簱鐨勫樊寮傦紝紜繚鐢‥JB3 QL鏌ヨ璇█緙栧啓鐨勪唬鐮佸彲鍦ㄤ笉鍚岀殑鏁版嵁搴撲笂榪愯銆傛瘮璧?span class="hilite1">EJB 2.1鐨勬煡璇㈣璦錛孍JB3鍙互榪愯鏈熸瀯閫狅紝鏀寔澶氭侊紝榪滆繙姣?span class="hilite1">EJB 2.1鐨勬煡璇㈡洿鐏墊椿鍜屽姛鑳藉己澶с傚湪紼嬪簭涓嬌鐢‥JB3 QL鍙互浣跨敤澶у啓(SELECT)鎴栬呭皬鍐?select)錛屼絾涓嶈澶у皬鍐?姣斿:Select)娣峰悎浣跨敤銆?
銆銆銆
Query鎺ュ彛
javax.persistence.Query鏄疎JB3鏌ヨ鎿嶄綔鐨勬帴鍙c傝繘琛屾煡璇紝棣栧厛瑕侀氳繃EntityManager 鑾峰緱Query瀵硅薄銆?
public Query createQuery(String ejbqlString);
涓嬮潰鎴戜滑鍋氫竴涓渶綆鍗曠殑鏌ヨ錛屾煡璇㈡墍鏈夌殑com.redsoft.samples.Order綾匯?
final Query query = entityManager.createQuery( "select o from Order o");
final List result = query.getResultList();
final Iterator iterator = result.iterator();
while( iterator.hasNext() ){
//銆澶勭悊Order
}
娉ㄦ剰"from Order"銆?Order"鍦‥JB3鏌ヨ涓О涓篶om.redsoft.samples.Order綾葷殑abstract schema Type銆傛煡璇ntity鍦‥JB3 QL涓兘鏄拡瀵笶ntity鐨凙bstract Schema Type榪涜鏌ヨ銆傚湪鍚屼竴涓狤ntityManagerFactory涓紝涓嶅厑璁稿悓鏃舵湁涓や釜Abstract Schema Type鐩稿悓鐨凟ntity綾匯傛瘮濡備笉鍏佽鍚屾椂鏈塩om.redsoft.samples.Order鍜宑om.redsoft.foo.Order銆傘銆
Query榪斿洖涓涓狶ist鐨勯泦鍚堢粨鏋滐紝鎴戜滑鍙互鐢↖terator鎴栬匧ist.get( int )鐨勬柟娉曟潵鑾峰緱姣忎釜絎﹀悎鏉′歡鐨凟ntity銆侺iberator EJB3 Persistence榪愯鐜鐨凲uery鏌ヨ鍦ㄦ瀯閫燪uery鐨勬椂鍊欑殑鍙槸鎶奅JB3 QL緙栬瘧鎴愮浉搴旂殑SQL錛屼絾騫朵笉鎵ц銆傚彧鏈夊綋搴旂敤浠g爜絎竴嬈¤皟鐢↖terator.next(),Iterator.hasNext()鎴栬?List.get( int )鏂規硶鐨勬椂鍊?緙栬瘧鍚庣殑SQL鎵嶄細琚湡姝g殑鎵ц銆?
鍦↙iberator EJB3 Persistence榪愯鐜榪斿洖鐨勭粨鏋滈泦鍚堜腑錛屽茍涓嶄繚瀛樻墍鏈夌殑緇撴灉錛岃屽彧鏄繚鎸佷竴涓寚鍚慗DBC ResultSet鎴栬呯紦瀛楻esultSet鐨勪竴涓(row)鎸囬拡銆傚彧鏈夊綋鐢ㄦ埛紜疄闇瑕佽幏寰桬ntity瀹炰緥鐨勬椂鍊欙紝鎵嶄細浠嶳esultSet涓幏鍙栨暟鎹茍濉厖鍒癊ntity瀹炰緥涓繑鍥炵粰搴旂敤銆?
濡傛灉鏌ヨ緇撴灉緇撳悎涓寘鍚墍鏈夌鍚堟潯浠剁殑Entity, Liberator EJB3 Persistence榪愯鐜榛樿浼氳嚜鍔ㄧ紦瀛樻瘡嬈℃煡璇㈢殑緇撴灉銆傝繖鏍蜂笅嬈″悓鏍風殑鏌ヨ鎿嶄綔灝辨棤闇璁塊棶鏁版嵁搴擄紝鑰岀洿鎺ヤ粠緙撳瓨涓繑鍥炵粨鏋滈泦鍚堛備絾濡傛灉鍦ㄤ笅嬈℃煡璇㈡搷浣滀箣鍓嶏紝鏈夐拡瀵硅緙撳瓨鐨凟ntity綾昏繘琛寀pdate/insert/delete鎿嶄綔錛屽垯緙撳瓨鐨勭粨鏋滈泦鍚堜細鑷姩琚竻絀猴紝榪欐牱涓嬫鏌ヨ灝變細浠庢暟鎹簱鑾峰緱鏁版嵁錛?紜繚鏌ヨ鎬繪槸鑾峰緱姝g‘鐨勭粨鏋滐紝閬垮厤緙撳瓨鑴忔暟鎹?
鏈夋椂鍊欐煡璇細榪斿洖嫻烽噺鐨勬暟鎹侺iberator EJB3榪愯鐜閲囩敤浜嗚嚜閫傚簲鐨勫急寮曠敤POJO綆$悊鏈哄埗錛屽彲浠ュ鐞嗘搗閲忕殑鏁版嵁銆傚湪鎴戜滑鐨勬祴璇曚腑鍜屽鎴風殑鐜鍙互澶勫崈涓囩駭鍒殑鏁版嵁閲忋備絾鍦ㄥ鐞嗗ぇ鏁版嵁閲忕殑鏃跺欙紝娉ㄦ剰鍏抽棴瀵歸泦鍚堢粨鏋滅殑緙撳瓨銆?
// 鍋囪榪斿洖鐨勭粨鏋滄暟閲忓法澶?
final Query query = entityManager.createQuery( "select o from Order o");
// 鍏抽棴瀵規煡璇㈢粨鏋滅殑緙撳瓨
query.setHint( Constants.QUERY_RESULT_CACHE, "false");
final List result = query.getResultList();
final Iterator iterator = result.iterator();
// 榪欓噷鎴戜滑鍙互澶勭悊嫻烽噺鐨勬暟鎹?
while( iterator.hasNext() ){
//銆澶勭悊Order
}
銆銆
綆鍗曟煡璇?
涓嬮潰鏄竴涓畝鍗曟煡璇㈢殑渚嬪瓙錛屽彲浠ョ湅鍒板拰SQL鐨勪嬌鐢ㄦ柟娉曞緢綾諱技銆?
final Query query = entityManager.createQuery( "select o from Order o where o.id = 1");
final Query query = entityManager.createQuery( "select o from Order o where o.id = 1 and o.confirm = 'true' ");
final Query query = entityManager.createQuery( "select o from Order o where o.id = 1 or o.customer = 'foo' ");
// address鏄疧rder綾諱笂鐨勪竴涓璞″彉閲忓睘鎬э紝Address鏈変竴涓猻treetNumber鐨勫睘鎬?
final Query query = entityManager.createQuery( "select o from Order o where o.address.streetNumber >= 123" );
娉ㄦ剰鏉′歡璇彞涓煡璇㈢殑鏄疎ntity鐨勫睘鎬э紝灞炴х殑鍚嶅瓧闇瑕佸拰Entity涓殑灞炴у彉閲忓悕瀛椾竴鑷淬?
浣跨敤鍙傛暟鏌ヨ
鍙傛暟鏌ヨ涔熷拰SQL涓殑鍙傛暟鏌ヨ綾諱技銆侲JB3 QL鏀寔涓ょ鏂瑰紡鐨勫弬鏁板畾涔夋柟寮? 鍛藉悕鍙傛暟鍜屼綅緗弬鏁般傚湪鍚屼竴涓煡璇腑鍙厑璁鎬嬌鐢ㄤ竴縐嶅弬鏁板畾涔夋柟寮忋?
鍛藉悕鍙傛暟:
final Query query = entityManager.createQuery( "select o from Order o where o.id = :myId");
// 璁劇疆鏌ヨ涓殑鍙傛暟
query.setParameter( "myId", 2 );
// 鍙互浣跨敤澶氫釜鍙傛暟
final Query query = entityManager.createQuery( "select o from Order o where o.id = :myId and o.customer = :customerName" );
// 璁劇疆鏌ヨ涓殑鍙傛暟
query.setParameter( "myId", 2 );
query.setParameter( "customerName", "foo" );
娉ㄦ剰涓嶅厑璁稿湪鍚屼竴涓煡璇腑浣跨敤涓や釜鐩稿悓鍚嶅瓧鐨勫懡鍚嶅弬鏁般?
浣嶇疆鍙傛暟錛?
final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1");
// 璁劇疆鏌ヨ涓殑鍙傛暟
query.setParameter( 1, 2 );// 1琛ㄧず絎竴涓弬鏁幫紝2鏄弬鏁扮殑鍊?
//鎴栬?
final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1").setParameter( 1, 2 );
// 鍙互浣跨敤澶氫釜鍙傛暟
final Query query = entityManager.createQuery( "select o from Order o where o.id = ?1 and o.customer = ?2" );
// 璁劇疆鏌ヨ涓殑鍙傛暟
query.setParameter( 1, 2 );
query.setParameter( 2, "foo" );
濡傛灉鍦ㄦ湭鏉ラ渶瑕佸湪涓嶅悓鐨凟JB3 榪愯鐜涓繍琛岋紝璇蜂嬌鐢ㄤ綅緗弬鏁幫紝淇濊瘉搴旂敤鏄彲縐繪鐨勩?
鎺掑簭(order by)
涓嬮潰鏄竴涓畝鍗曟煡璇㈢殑渚嬪瓙錛屽彲浠ョ湅鍒板拰SQL鐨勪嬌鐢ㄦ柟娉曞緢綾諱技銆?ASC"鍜?DESC"鍒嗗埆涓哄崌搴忓拰闄嶅簭錛屽鏋滀笉鏄懼紡娉ㄦ槑錛孍JB3 QL涓粯璁や負asc鍗囧簭銆?
// 涓嶆敞鏄庣殑璇濓紝榛樿涓篴sc涓哄崌搴?
final Query query = entityManager.createQuery( "select o from Order o order by o.id");
final Query query = entityManager.createQuery( "select o from Order o order by o.address.streetNumber desc");// desc涓洪檷搴?
final Query query = entityManager.createQuery( "select o from Order o order by o.id, o.address.streetNumber");
鏌ヨ閮ㄥ垎灞炴?
鍦ㄥ墠闈㈢殑渚嬪瓙涓紝閮芥槸瀵歸拡瀵笶ntity綾葷殑鏌ヨ錛岃繑鍥炵殑涔熸槸琚煡璇㈢殑Entity綾葷殑瀹炰綋銆侲JB3 QL涔熷厑璁告垜浠洿鎺ユ煡璇㈣繑鍥炴垜浠渶瑕佺殑灞炴э紝鑰屼笉鏄繑鍥炴暣涓狤ntity銆傚湪涓浜汦ntity涓睘鎬х壒鍒鐨勬儏鍐碉紝榪欐牱鐨勬煡璇㈠彲浠ユ彁楂樻ц兘銆?
// 鐩存帴鏌ヨ鎴戜滑鎰熷叴瓚g殑灞炴?鍒楋級
final Query query = entityManager.createQuery( "select o.id, o.customerName, o.address.streetNumber from Order o order by o.id");
// 闆嗗悎涓殑涓嶅啀鏄疧rder,鑰屾槸涓涓狾bject[]瀵硅薄鏁扮粍
final List result = query.getResultList();
// 絎竴涓
Object[] row = result.get( 0 );
// 鏁扮粍涓殑絎竴涓兼槸id
int id = Integer.parseInt( row[0].toString() );
String customerName = row[1].toString();
String streetNumber = Integer.parseInt( row[2].toString() );
鏌ヨ涓嬌鐢ㄦ瀯閫犲櫒(Constructor)
EJB3 QL鏀寔灝嗘煡璇㈢殑灞炴х粨鏋滅洿鎺ヤ綔涓轟竴涓猨ava class鐨勬瀯閫犲櫒鍙傛暟錛屽茍浜х敓瀹炰綋浣滀負緇撴灉榪斿洖銆?
// 鎴戜滑鎶婇渶瑕佺殑涓変釜灞炴т綔涓轟竴涓猚lass( OrderHolder )鐨勬瀯閫犲櫒鍙傛暟錛屽茍浣跨敤new鍑芥暟銆?nbsp;
Query query = entityManager.createQuery("select new com.redsoft.ejb3.dummy.OrderHolder ( o.id, o.vender, o.partNumber ) FROM Order AS o");
// 闆嗗悎涓殑緇撴灉鏄疧rderHolder
List result = query.getResultList();
璇ava class涓嶉渶瑕佹槸Entity Class銆侼EW瑕佹眰java class浣跨敤鍏ㄥ悕銆?
鑱氬悎鏌ヨ(Aggregation)
璞″ぇ閮ㄥ垎鐨凷QL涓鏍?EJB3 QL涔熸敮鎸佹煡璇腑鐨勮仛鍚堝嚱鏁般傜洰鍓?span class="hilite1">EJB QL鏀寔鐨勮仛鍚堝嚱鏁板寘鎷細
* AVG
* SUM
* COUNT
* MAX
* MIN
final Query query = entityManager.createQuery( "select MAX( o.id ) from Order where o.customerName='foo'");
// 濡傛灉鎴戜滑鐭ラ亾緇撴灉鏄崟涓紝鎴戜滑鍙互鐢╣etSingleResult()鑾峰緱緇撴灉
final Object result = query.getSingleResult();
// 鐢變簬Order涓璱d鐨勭被鍨嬩負long,
final Long max = (Long)result;
// 鍦ㄤ竴浜涙暟鎹簱涓璵ax鍑芥暟榪斿洖鐨勭粨鏋滅殑綾誨瀷涓嶄竴瀹氫簬id瀵瑰簲鐨勫垪鐨勭被鍨嬬浉絎︼紝鏇村畨鍏ㄧ殑鏂瑰紡鍙互閲囩敤string鏉ヨ漿鍨?
fina long max = Long.parseLong( result.toString() );
鑱氬悎鍑芥暟涔熷彲浠ヤ綔涓鴻鏌ヨ鐨勪竴涓睘鎬ц繑鍥炪?
// 榪斿洖鎵鏈夌殑璁㈠崟鐨勭敓浜у巶鍟嗗拰浠栦滑鐨勮鍗曚環鍊兼婚
final Query query
= entityManager.createQuery( "select o.vender, sum(o.amount) FROM Order o銆group by o.vender");");
鍜孲QL涓鏍鳳紝濡傛灉鑱氬悎鍑芥暟涓嶆槸select...from鐨勫敮涓涓涓繑鍥炲垪錛岄渶瑕佷嬌鐢?GROUP BY"璇彞銆?GROUP BY"搴旇鍖呭惈select璇彞涓櫎浜嗚仛鍚堝嚱鏁板鐨勬墍鏈夊睘鎬с?
// 榪斿洖鎵鏈夌殑璁㈠崟鐨勭敓浜у巶鍟嗙殑鐨勫悕瀛楋紝璐х墿鍙風爜鍜屾瘡縐嶈揣鐗╃殑璁㈠崟浠峰兼婚
// 娉ㄦ剰group by鍚庨潰蹇呴』鍖呭惈o.vender鍜宱.partNumber
final Query query
= entityManager.createQuery( "select o.vender, o.partNumber, sum(o.amount) FROM Order o銆group by o.vender錛宱.partNumber");
濡傛灉榪橀渶瑕佸姞涓婃煡璇㈡潯浠訛紝闇瑕佷嬌鐢?HAVING"鏉′歡璇彞鑰屼笉鏄?WHERE"璇彞銆?
// 榪斿洖鎵鏈夌殑璁㈠崟鐨勭敓浜у巶鍟嗘槸"foo"鐨勮揣鐗╁彿鐮佸拰姣忕璐х墿鐨勮鍗曚環鍊兼婚
// 榪欓噷"having o.vender = 'foo'涓烘潯浠?
final Query query
= entityManager.createQuery( "select o.vender, o.partNumber, sum(o.amount) FROM Order o銆
group by o.vender錛宱.partNumber having o.vender='foo'");
鍦?HAVING"璇彞閲屽彲浠ヨ窡"WHERE"璇彞涓鏍蜂嬌鐢ㄥ弬鏁般?
// 榪斿洖鎵鏈夌殑璁㈠崟鐨勭敓浜у巶鍟嗘槸"foo"鐨勮揣鐗╁彿鐮佸拰姣忕璐х墿鐨勮鍗曚環鍊兼婚
// 榪欓噷"having o.vender = 'foo'涓烘潯浠?
final Query query
= entityManager.createQuery( "select o.vender, o.partNumber, sum(o.amount) FROM Order o銆
group by o.vender錛宱.partNumber having o.vender=?1");
query.setParameter( 1, "foo" );
final List result = query.getResultList();
鍏寵仈(join)
鍦‥JB3 QL涓紝澶ч儴鍒嗙殑鎯呭喌涓嬶紝浣跨敤瀵硅薄灞炴ч兘闅愬惈浜嗗叧鑱?join)銆備緥濡傚湪浠ヤ笅鏌ヨ涓細
final Query query = entityManager.createQuery( "select o from Order o
where o.address.streetNumber=2000 order by o.id");
褰撹繖涓彞EJB3 QL緙栬瘧鎴愪互涓嬬殑SQL鏃跺氨浼氳嚜鍔ㄥ寘鍚簡鍏寵仈,EJB3 QL緙栬瘧鎴怱QL鏃跺叧鑱旈粯璁ゅ彇宸﹀叧鑱?left join)銆?
select o.id, o.vender, o.partNumber, o.amount, addressTable.id, addressTable.streetNumber
from orderTable as o left join addressTable where addressTable.streetNumber = 2000
浣嗗湪涓浜涙儏鍐典笅錛屾垜浠粛鐒墮渶瑕佸鍏寵仈鍋氱簿紜殑鎺у埗銆傚洜姝JB3 QL浠嶇劧鏀寔鍜孲QL涓被浼肩殑鍏寵仈璇硶錛?
* left out join/left join
* inner join
* left join/inner join fetch
left join, left out join絳変箟錛岄兘鏄厑璁哥鍚堟潯浠剁殑鍙寵竟琛ㄨ揪寮忎腑鐨凟ntiies涓虹┖銆?
// 榪斿洖鎵鏈夊湴鍧涓?000鐨凮rder綰綍錛屼笉綆rder涓槸鍚︽湁OrderItem
final Query query = entityManager.createQuery( "select o from Order o
left join o.orderItems where o.address.streetNumber=2000 order by o.id");
鐢變簬EJB3 QL榛樿閲囩敤left join銆傝繖鏍風殑鏌ヨ鍜屼互涓嬬殑EJB3 QL鍏跺疄鏄瓑浠風殑銆?
// 榪斿洖鎵鏈夊湴鍧涓?000鐨凮rder綰綍錛屼笉綆rder涓槸鍚︽湁OrderItem
final Query query = entityManager.createQuery( "select o from Order o
where o.address.streetNumber=2000 order by o.id");
闇瑕佹樉寮忎嬌鐢╨eft join/left outer join鐨勬儏鍐典細姣旇緝灝戙?
inner join瑕佹眰鍙寵竟鐨勮〃杈懼紡蹇呴』榪斿洖Entities銆?
// 榪斿洖鎵鏈夊湴鍧涓?000鐨凮rder綰綍錛孫rder涓繀欏繪湁OrderItem
final Query query = entityManager.createQuery( "select o from Order o
inner join o.orderItems where o.address.streetNumber=2000 order by o.id");
left/left out/inner join fetch鎻愪緵浜嗕竴縐嶇伒媧葷殑鏌ヨ鍔犺澆鏂瑰紡鏉ユ彁楂樻煡璇㈢殑鎬ц兘銆傚湪榛樿鐨勬煡璇腑錛孍ntity涓殑闆嗗悎灞炴ч粯璁や笉浼氳鍏寵仈錛岄泦鍚堝睘鎬ч粯璁ゆ槸緙撳姞杞? lazy-load )銆?
``` // 榛樿EJB3 QL緙栬瘧鍚庝笉鍏寵仈闆嗗悎灞炴у彉閲?orderItems)瀵瑰簲鐨勮〃
final Query query = entityManager.createQuery( "select o from Order o
inner join o.orderItems where o.address.streetNumber=2000 order by o.id");
final List result = query.getResultList();
// 榪欐椂鑾峰緱Order瀹炰綋涓璷rderItems( 闆嗗悎灞炴у彉閲?)涓虹┖
final Order order = (Order)result.get( 0 )
// 褰撳簲鐢ㄩ渶瑕佹椂錛孍JB3 Runtime鎵嶄細鎵ц涓鏉QL璇彞鏉ュ姞杞藉睘浜庡綋鍓峅rder鐨凮rderItems
Collection orderItems = order.getOrderItems();
榪欐牱鐨勬煡璇㈡ц兘涓婃湁涓嶈凍鐨勫湴鏂廣備負浜嗘煡璇涓狾rder錛屾垜浠渶瑕佷竴鏉QL璇彞鑾峰緱鎵鏈夌殑Order鐨勫師濮?瀵硅薄灞炴э紝 浣嗛渶瑕佸彟澶朜鏉¤鍙ヨ幏寰楁瘡涓狾rder鐨刼rderItems闆嗗悎灞炴с備負浜嗛伩鍏峃+1鐨勬ц兘闂錛屾垜浠彲浠ュ埄鐢╦oin fetch涓嬈¤繃鐢ㄤ竴鏉QL璇彞鎶奜rder鐨勬墍鏈変俊鎭煡璇㈠嚭鏉ャ?
// 榪斿洖鎵鏈夊湴鍧涓?000鐨凮rder綰綍錛孫rder涓繀欏繪湁OrderItem
final Query query = entityManager.createQuery( "select o from Order o
inner join fetch o.orderItems where o.address.streetNumber=2000 order by o.id");
鐢變簬浣跨敤浜唂etch,榪欎釜鏌ヨ鍙細浜х敓涓鏉QL璇彞錛屾瘮鍘熸潵闇瑕丯+1鏉QL璇彞鍦ㄦц兘涓婃湁浜嗘瀬澶х殑鎻愬崌銆?
姣旇緝Entity
鍦ㄦ煡璇腑浣跨敤鍙傛暟鏌ヨ鏃訛紝鍙傛暟綾誨瀷闄や簡String, 鍘熷鏁版嵁綾誨瀷( int, double絳?鍜屽畠浠殑瀵硅薄綾誨瀷( Integer, Double絳?,涔熷彲浠ユ槸Entity鐨勫疄渚嬨?
final Query query = entityManager.createQuery( "select o from Order o where o.address = ?1 order by o.id");
final Address address = new Address( 2001, "foo street", "foo city", "foo province" );
// 鐩存帴鎶奱ddress瀵硅薄浣滀負鍙傛暟銆?
query.setParameter( 1, address );
鎵歸噺鏇存柊(Batch Update)
EJB3 QL鏀寔鎵歸噺鏇存柊銆?
Query query = managerNew.createQuery("update Order as o set o.vender=:newvender, o.partNumber='fooPart' where o.vender = 'foo'");
query.setParameter("newvender", "barVender");
// update鐨勮褰曟暟
int result = query.executeUpdate();
鎵歸噺鍒犻櫎(Batch Remove)
EJB3 QL鏀寔鎵歸噺鍒犻櫎銆?
Query query = managerNew.createQuery("DELETE FROM Order");
int result = query.executeUpdate();
Query query = managerNew.createQuery("DELETE FROM Order AS o WHERE o.vender='redsoft'");
int result = query.executeUpdate();
浣跨敤鎿嶄綔絎OT
// 鏌ヨ鎵鏈塿ender涓嶇瓑浜?foo"鐨凮rder
Query query = managerNew.createQuery("SELECT FROM Order AS o WHERE not(o.vender='foo')");
List result = query.getResultList();
// 鍒犻櫎鎵鏈塿ender涓嶇瓑浜?foo"鐨凮rder
Query query = managerNew.createQuery("DELETE FROM Order AS o WHERE not(o.vender='foo')");
int result = query.executeUpdate();
浣跨敤鎿嶄綔絎ETWEEN
// 鏌ヨ鎵鏈変環鍊糰mount鍦紩鍜?0涔嬮棿鐨?鍖呭惈5,10)鐨凮rder
Query query = managerNew.createQuery("select o FROM Order AS o left join o.orderItems ot where o.amount BETWEEN 5 AND 10 order by o.vender desc");
List result = query.getResultList();
浣跨敤鎿嶄綔絎N
// 鏌ヨ鎵鏈塿ender鏄?foo1", "foo2"鎴栬?foo3"鐨凮rder
Query query = managerNew.createQuery("select o FROM Order AS o left join o.orderItems ot where o.vender in ( 'foo1', 'foo2', 'foo3' ) order by o.vender desc");
List result = query.getResultList();
浣跨敤鎿嶄綔絎IKE
// 鏌ヨ鎵鏈塿ender浠ュ瓧絎︿覆"foo"寮澶寸殑Order
Query query = managerNew.createQuery("select o FROM Order as o where o.vender like 'foo%' order by o.vender desc");
List result = query.getResultList();
// 鏌ヨ鎵鏈塿ender浠ュ瓧絎︿覆"foo"緇撳熬鐨凮rder
Query query = managerNew.createQuery("select o FROM Order as o where o.vender like '%foo' order by o.vender desc");
List result = query.getResultList();
// 鍙互緇撳悎NOT涓璧蜂嬌鐢紝姣斿鏌ヨ鎵鏈塿ender涓嶄互浠ュ瓧絎︿覆"foo"緇撳熬鐨凮rder
Query query = managerNew.createQuery("select o FROM Order as o where o.vender not like '%foo' order by o.vender desc");
List result = query.getResultList();
// 鍙互緇撳悎escape浣跨敤錛屾瘮濡傛煡璇㈡墍鏈塿ender浠?foo"寮濮嬬殑Order騫跺拷鐣?3'瀛楃銆?
// 濡傛灉vender鏄?foo1", "foo2", "foo3"絎﹀悎榪欎釜鏉′歡, 鍙﹀"3foo1", "f3oo4"涔熺鍚堟潯浠躲?
Query query = managerNew.createQuery("select o FROM Order as o where o.vender like '%foo' escape '3' order by o.vender desc");
List result = query.getResultList();
浣跨敤鎿嶄綔絎S NULL
// 鏌ヨ鎵鏈夋病鏈夊湴鍧鐨凮rder
Query query = managerNew.createQuery("select o FROM Order as o where o.address is null");
List result = query.getResultList();
// 鏌ヨ鎵鏈夊湴鍧闈炵┖鐨凮rder
Query query = managerNew.createQuery("select o FROM Order as o where o.address is not null");
List result = query.getResultList();
浣跨敤鎿嶄綔絎S EMPTY
IS EMPTY鏄拡瀵歸泦鍚堝睘鎬?Collection)鐨勬搷浣滅銆傚彲浠ュ拰NOT涓璧蜂嬌鐢ㄣ?
// 鏌ヨorderItems闆嗗悎涓虹┖鐨凮rder
Query query = managerNew.createQuery("select o FROM Order o where o.orderItems is empty by o.vender desc");
List result = query.getResultList();
// 鏌ヨorderItems闆嗗悎闈炵┖鐨凮rder
Query query = managerNew.createQuery("select o FROM Order o where o.orderItems is not empty by o.vender desc");
List result = query.getResultList();
浣跨敤鎿嶄綔絎XISTS
[NOT]EXISTS闇瑕佸拰瀛愭煡璇㈤厤鍚堜嬌鐢ㄣ?
Query query = manager.createQuery("select o FROM Order o where exists (select o from Order o where o.partNumber=?1) order by o.vender desc");
query.setParameter(1, "partNumber");
Query query = manager.createQuery("select o FROM Order o where o.vender='partNumber' and not exists (select o from Order o where o.partNumber=?1) order by o.vender desc");
query.setParameter(1, "partNumber");
浣跨敤鎿嶄綔絎LL/SOME/ANY
Query query = managerNew.createQuery("select emp from EmployeeA emp where emp.salary > all ( select m.salary from Manager m where m.department = emp.department)");
List result = query.getResultList();
Query query = managerNew.createQuery("select emp from EmployeeA emp where emp.salary > any ( select m.salary from Manager m where m.department = emp.department)");
List result = query.getResultList();
Query query = managerNew.createQuery("select emp from EmployeeA emp where emp.salary > some ( select m.salary from Manager m where m.department = emp.department)");
List result = query.getResultList();
瀛楃涓插嚱鏁?
EJB3 QL瀹氫箟浜嗗唴緗嚱鏁版柟渚夸嬌鐢ㄣ傝繖浜涘嚱鏁扮殑浣跨敤鏂規硶鍜孲QL涓浉搴旂殑鍑芥暟鏂規硶綾諱技銆侲JB3 QL涓畾涔夌殑瀛楃涓插嚱鏁板寘鎷細
* CONCAT銆瀛楃涓叉嫾鎺?
* SUBSTRING銆瀛楃涓叉埅鍙?
* TRIM 鍘繪帀絀烘牸
* LOWER銆杞崲鎴愬皬鍐?
* UPPER銆瑁呮崲鎴愬ぇ鍐?
* LENGTH 瀛楃涓查暱搴?
* LOCATE 瀛楃涓插畾浣?
// concat灝嗗弬鏁頒腑鐨勪袱涓瓧絎︿覆騫剁粨鎴愪竴涓瓧絎︿覆,榪欓噷firstName鏄?foo", lastName鏄?bar"
Query query = entityManager.createQuery("select concat( o.owner.firstName, o.owner.lastName ) FROM Order AS o left outer join o.orderItems as oi where o.owner.firstName='foo'");
List result = query.getResultList();
assertEquals("foobar", result.get(0).toString());
// firstName鏄?fooBar",緇撴灉搴旇榪斿洖"oo"
Query query = entityManager.createQuery("select o.vender,substring( o.owner.firstName, 1, 3 ), o.owner.info.age FROM Order AS o left outer join o.orderItems as oi where o.owner.firstName='charles'");
List result = query.getResultList();
Object[] row1 = (Object[]) result.get(0);
assertEquals("oo", row1[1].toString());
// 鑾峰緱"ar"鍦╢irstName涓湴璧峰浣嶇疆
Query query = managerNew.createQuery("SELECT emp.firstName , emp.salary , locate( emp.firstName, 'ar') FROM EmployeeA as emp where emp.firstName='charles1111'");
List result = query.getResultList();
璁$畻鍑芥暟
EJB3 QL涓畾涔夌殑璁$畻鍑芥暟鍖呮嫭錛?
* ABS銆緇濆鍊?
* SQRT 騫蟲柟鏍?
* MOD 鍙栦綑鏁?
* SIZE 鍙栭泦鍚堢殑鏁伴噺
Query query = entityManager.createQuery("select o.vender, size( o.orderItems ) FROM Order o where o.owner.firstName = 'charles' group by o.vender order by o.vender desc");
List result = query.getResultList();
// 鍑芥暟涔熷彲浠ョ敤鍦ㄦ潯浠朵腑
Query query = managerNew.createQuery("select o.vender, sum(o.amount) FROM Order AS o left join o.orderItems ot group by o.vender having size(o.orderItems) = 0 or lower( o.vender ) = 'foo' order by o.vender desc");
List result = query.getResultList();
// 鍙栦綑鏁?
Query query = managerNew.createQuery("select mod( o.owner.info.age, 10 ) FROM Order o where exists ( select o from Order o where o.partNumber= :name ) and o.vender='order1' and exists ( select o from Order o where o.amount= :name1 ) order by o.vender desc");
瀛愭煡璇?
瀛愭煡璇㈠彲浠ョ敤浜嶹HERE鍜孒AVING鏉′歡璇彞涓?
Query query = managerNew.createQuery("select emp from EmployeeA as emp where ( select count(m) from Manager as m where m.department = emp.department) > 0 ");
List result = query.getResultList();
]]>
瑕佽皟鐢ㄥ瓨鍌ㄨ繃紼嬶紝鎴戜滑鍙互閫氳繃EntityManager 瀵硅薄鐨刢reateNativeQuery()鏂規硶鎵цSQL 璇彞(娉ㄦ剰錛氳繖閲岃鐨勬槸SQL 璇彞錛屼笉鏄疎JB3 QL), 璋冪敤瀛樺偍榪囩▼鐨凷QL 鏍煎紡濡備笅錛?br />
{call 瀛樺偍榪囩▼鍚嶇О(鍙傛暟1, 鍙傛暟2, … )}
鍦‥JB3 涓綘鍙互璋冪敤鐨勫瓨鍌ㄨ繃紼嬫湁涓ょ
1錛庢棤榪斿洖鍊肩殑瀛樺偍榪囩▼銆?/font>
2錛庤繑鍥炲間負ResultSet錛堜互select 褰㈠紡榪斿洖鐨勫鹼級鐨勫瓨鍌ㄨ繃紼嬶紝EJB3 涓嶈兘璋冪敤浠UT 鍙傛暟榪斿洖鍊肩殑瀛樺偍榪囩▼
1.璋冪敤鏃犺繑鍥炲肩殑瀛樺偍榪囩▼
//璋冪敤鏃犺繑鍥炲弬鏁扮殑瀛樺偍榪囩▼
Query query = em.createNativeQuery("{call Procedure()}");
query.executeUpdate();
2.璋冪敤榪斿洖鍗曞肩殑瀛樺偍榪囩▼
//璋冪敤榪斿洖鍗曚釜鍊肩殑瀛樺偍榪囩▼
Query query = em.createNativeQuery("{call GetPersonName(?)}");
query.setParameter(1, new Integer(1));
String result = query.getSingleResult().toString();
3.璋冪敤榪斿洖琛ㄥ叏閮ㄥ垪鐨勫瓨鍌ㄨ繃紼?br />
鍦ㄨ皟鐢ㄥ瓨鍌ㄨ繃紼嬫椂,鍙互璁〦JB3 Persistence 榪愯鐜灝嗗垪鍊肩洿鎺ュ~鍏呭叆涓涓狤ntity 鐨勫疄渚嬶紙鏈緥濉厖榪汸erson 瀵硅薄錛夛紝騫跺皢瀹炰緥浣滀負緇撴灉榪斿洖
//璋冪敤榪斿洖Person 鍏ㄩ儴鍒楃殑瀛樺偍榪囩▼
Query query = em.createNativeQuery("{call GetPersonList()}", Person.class);
List result = query.getResultList();
瀛樺偍榪囩▼GetPersonList:
CREATE PROCEDURE `GetPersonList`()
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
select * from person;
END;
4.璋冪敤榪斿洖閮ㄥ垎鍒楃殑瀛樺偍榪囩▼
鍒涘緩瀛樺偍榪囩▼:
CREATE PROCEDURE `GetPersonPartProperties`()
NOT DETERMINISTICSQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT personid, personname from person;
END;
//璋冪敤榪斿洖閮ㄥ垎鍒楃殑瀛樺偍榪囩▼
Query query = em.createNativeQuery("{call GetPersonPartProperties()}");
List result = query.getResultList();
]]>
Exception in thread "main" java.lang.NoClassDefFoundError: Lorg/jboss/invocation/Invoker;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Unknown Source)
at java.lang.Class.getDeclaredField(Unknown Source)
at java.io.ObjectStreamClass.getDeclaredSUID(Unknown Source)
at java.io.ObjectStreamClass.access$700(Unknown Source)
at java.io.ObjectStreamClass$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectStreamClass.initNonProxy(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.aop.joinpoint.InvocationResponse.readExternal(InvocationResponse.java:107)
at java.io.ObjectInputStream.readExternalData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:128)
at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:66)
at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:279)
at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
at org.jboss.remoting.Client.invoke(Client.java:525)
at org.jboss.remoting.Client.invoke(Client.java:488)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:41)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:34)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:46)
at $Proxy1.createProxy(Unknown Source)
at org.jboss.ejb3.JndiProxyFactory.getObjectInstance(JndiProxyFactory.java:52)
at javax.naming.spi.NamingManager.getObjectInstance(Unknown Source)
at org.jnp.interfaces.NamingContext.getObjectInstance(NamingContext.java:1125)
at org.jnp.interfaces.NamingContext.getObjectInstanceWrapFailure(NamingContext.java:1142)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:705)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.lyh.ejb3.clients.TravelAgentShell.getAgent(TravelAgentShell.java:46)
at com.lyh.ejb3.clients.TravelAgentShell.customer(TravelAgentShell.java:156)
at com.lyh.ejb3.clients.TravelAgentShell.processCommand(TravelAgentShell.java:115)
at com.lyh.ejb3.clients.TravelAgentShell.shell(TravelAgentShell.java:83)
at com.lyh.ejb3.clients.TravelAgentShell.main(TravelAgentShell.java:36)
Hibernate EntityManager 鏂囨。鎻忚堪濡備笅:
If no persistence.xml with the correct
name are found or if the expected persistence provider is not found, a PersistenceException is raised.
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:217)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:114)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:37)
at com.titan.clients.StandaloneClient.main(StandaloneClient.java:16)
Caused by: org.hibernate.HibernateException: Hibernate Dialect must be explicitly set
at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:57)
at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:397)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1928)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1211)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:631)
at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:760)
at org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.java:151)
at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:205)
... 3 more
鍔犲叆JBOSS鐨刯boss-EJB-3.0_Embeddable_ALPHA_8涓殑jar鍖呭嵆鍙?br />
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named titan
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:41)
at com.lyh.ejb3.clients.StandaloneClient.main(StandaloneClient.java:21)
鍦ㄦ暟鎹簱涓彃鍏ュ瓧孌碉紝騫舵姏鍑哄紓甯?br />
public Integer getId() {
return this.id;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public void setId(Integer id) {
this.id = id;
}
鏂囩珷鍑哄錛欴IY閮ㄨ惤(http://www.diybl.com/course/1_web/webjs/20071021/79030_6.html)
]]>
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:720)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:127)
at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:246)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.ejb3.ServiceDelegateWrapper.startService(ServiceDelegateWrapper.java:103)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:417)
at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy69.start(Unknown Source)
at org.jboss.ejb3.JmxKernelAbstraction.install(JmxKernelAbstraction.java:120)
at org.jboss.ejb3.Ejb3Deployment.startPersistenceUnits(Ejb3Deployment.java:627)
at org.jboss.ejb3.Ejb3Deployment.start(Ejb3Deployment.java:351)
at org.jboss.ejb3.Ejb3Module.startService(Ejb3Module.java:91)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
at $Proxy0.start(Unknown Source)
at org.jboss.system.ServiceController.start(ServiceController.java:417)
at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy33.start(Unknown Source)
at org.jboss.ejb3.EJB3Deployer.start(EJB3Deployer.java:512)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)
at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:87)
at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)
at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy34.start(Unknown Source)
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
at $Proxy9.deploy(Unknown Source)
at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:274)
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:225)
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, for columns: [org.hibernate.mapping.Column(lineItems)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:266)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
at org.hibernate.mapping.Property.isValid(Property.java:185)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:440)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:713)
@Column(name = "ID")
]]>
]]>
濡傚嚭鐜扮被浼間互涓嬪紓甯革細
org.hibernate.AnnotationException: Collection has neither generic type or OneToMany.targetEntity() defined: org.svse.org.model.Order.orderItems
璇鋒鏌rderItems榪欎釜灞炴ф槸鍚︿嬌鐢ㄤ簡娉涘瀷,濡?Set<OrderItem>.
濡傛灉鏈嬌鐢ㄦ硾鍨?璇峰湪OneToMany娉ㄩ噴涓嬌鐢╰argetEntity鎸囧畾鍏冪礌鐨勭被鍨?/span>
EJB3.x錛氶儴緗?鍗歌澆)EntityBean鏃惰嚜鍔ㄥ垱寤?鍒犻櫎)琛ㄧ粨鏋?/strong>
persistence.xml
properties 鑺傜偣鐢ㄤ綔鎸囧畾Hibernate鐨勫悇欏瑰睘鎬э紝濡傛灉hibernate.hbm2ddl.auto鐨勫艱涓篶reate-drop錛屽湪瀹炰綋Bean鍙戝竷鍙婂嵏杞芥椂灝嗚嚜鍔ㄥ垱寤哄強鍒犻櫎鐩稿簲鏁版嵁搴撹〃(娉ㄦ剰錛欽boss鏈嶅姟鍣ㄥ惎鍔ㄦ垨鍏抽棴鏃朵細寮曞彂瀹炰綋Bean鐨勫彂甯冨強鍗歌澆)銆?/span>
濡傛灉浣犵殑琛ㄥ凡緇忓瓨鍦?騫朵笖鎯充繚鐣欐暟鎹紝鍙戝竷瀹炰綋bean鏃跺彲浠ユ妸hibernate.hbm2ddl.auto鐨勫艱涓簄one鎴杣pdate,浠ュ悗涓轟簡瀹炰綋bean 鐨勬敼鍔ㄨ兘鍙嶅簲鍒版暟鎹〃錛屽緩璁嬌鐢╱pdate錛岃繖鏍峰疄浣揃ean娣誨姞涓涓睘鎬ф椂鑳藉悓鏃跺湪鏁版嵁琛ㄥ鍔犵浉搴斿瓧孌點?/span>
濡傚嚭鐜扮被浼間互涓嬪紓甯革細
21:23:05,106 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@473201
javax.persistence.PersistenceException: org.hibernate.HibernateException: identifier of an instance of net.model.entity.Role was altered from 2 to 0
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:513)
at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:101)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:263)
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:177)
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1414)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75)
at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:170)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:87)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:159)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:65)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:486)
at org.jboss.ejb3.session.InvokableContextClassProxyHack._dynamicInvoke(InvokableContextClassProxyHack.java:56)
at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:91)
at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:82)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:908)
at org.jboss.remoting.transport.socket.ServerThread.completeInvocation(ServerThread.java:742)
at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:695)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:522)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:230)
Caused by: org.hibernate.HibernateException: identifier of an instance of net.model.entity.Role was altered from 2 to 0
at org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:81)
at org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:187)
at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:143)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:504)
... 34 more
璇鋒鏌ole綾葷殑涓婚敭灞炴ф槸鍚︽槸灝佽綾誨瀷銆備緥濡傦細Integer錛孡ong ……銆備笉鑳芥槸int錛宭ong絳夋暟鎹被鍨嬨?/span>
渚嬪浠ヤ笅浠g爜錛?/span>
娉ㄦ剰uniqueConstraints={@UniqueConstraint(columnNames={"ROLE_NAME"})} 涓殑columnNames灞炴у間負鏁版嵁搴撹〃涓殑瀛楁鍚?/span>錛岃屼笉鏄疪ole綾諱腑鐨勭被鎴愬憳鍚峳oleName銆?/span>
鍦ㄥ埗瀹欵ntity Bean鏃訛紝璁劇疆浜嗚瀹炰綋鐨凘UniqueConstraint闄愬埗銆備絾鏄璇ュ疄浣揃ean榪涜閮ㄧ講鍚庯紝騫舵病鏈夊湪鏁版嵁搴撹〃涓湅鍒板搴旇〃瀛楁鍑虹幇unique闄愬埗銆傝繖鏄洜涓篅UniqueConstraint鏍囪蹇呴』鍦ㄨ嚜鍔ㄧ敓鎴愯〃鐨勬儏鍐典笅鎵嶈搗浣滅敤銆傚嵆錛屽湪persistence.xml涓皢hibernate.hbm2ddl.auto璁劇疆涓篶reate-drop銆傚惁鍒欙紝鍞竴鎬х害鏉熼檺鍒朵笉浼氳鍔犲叆鍒版暟鎹簱涓?/span>
浠ヤ笅鏄奐SR 220: Enterprise JavaBeansTM,Version 3.0 Java Persistence API銆嬫枃妗g殑鍘熸枃璇存槑錛?/span>
Type Name Description Default UniqueConstraint[] uniqueConstraints (Optional) Unique constraints that are to be placed on the table. These are only used if table generation is in effect. These constraints apply in addition to any constraints specified by the Column and JoinColumn annotations and constraints entailed by primary key mappings. No additional constraints