我是JPQL的新手,我正在尝试编写一个连接查询,该查询从where子句中的子查询中获取结果。我有这样的lloks:
Query query = em.createQuery("SELECT distinct pt.srcCanum FROM Pmt pt " +
"LEFT OUTER JOIN pt.txnhistPK ps " +
"WHERE " +
"pt.isudDt > '2015-08-01' and pt.certdDt is null " +
"OR ps.pmtUid = "+
"ALL(SELECT pq.pmtUid FROM txnhistPK pq" +
"WHERE pq.pmtChngTs > '2015-08-01')");
但它不起作用。我尝试了许多不同的方法,但没有工作。请帮忙。
堆栈跟踪: javax.ejb.EJBException:参见嵌套异常;嵌套异常是:org.apache.openjpa.persistence.ArgumentException:"遇到" ps。 pmtUid存在"在角色131,但预期:["("," *"," +"," - ",&# 34;。"," /",":","<","< =" ,"<>"," =",">","> =",&#34 ;?"," ABS"," ALL"," AND"," ANY"," AS&#34 ;," ASC"," AVG"," BETWEEN"," BOTH"," BY",&#34 ; CONCAT"," COUNT"," CURRENT_DATE"," CURRENT_TIME"," CURRENT_TIMESTAMP"," DELETE" ," DESC"," DISTINCT"," EMPTY"," ESCAPE"," EXISTS"," FETCH"," FROM"," GROUP"," HAVING"," IN"," INNER", " IS"," JOIN"," LEADING"," LEFT"," LENGTH"," LIKE& #34;," LOCATE"," LOWER"," MAX","会员"," MIN",& #34; MOD"," NEW"," NOT"," NULL"," OBJECT"," OF&# 34;," OR",&#34 ; ORDER"," OUTER"," SELECT"," SET"," SIZE"," SOME" ," SQRT"," SUBSTRING"," SUM"," TRAILING"," TRIM"," TYPE"," UPDATE"," UPPER"," WHERE" ,,,,,,,,,。"解析JPQL" SELECT distinct pt.srcCanum FROM Pmt pt LEFT OUTER JOIN pt.txnhistPK ps WHERE pt.isudDt> ' 2015年8月1日'并且pt.certdDt为空或者ps.pmtUid存在ALL(SELECT pq.pmtUid FROM txnhistPK pqWHERE pq.pmtChngTs>' 2015-08-01')"。有关原始解析错误,请参阅嵌套堆栈跟踪。
字符131是OR之后的ps in ps。不需要发布实体来理解。首先,它们是巨大的。这是一个简短的纲要:pmt有一个pmtUid和srcCanum。 txnhist保存对pmt的更改,并包含一个包含pmtUid和pmtChngTs的复合键(txnhistPK)。当满足查询中的条件时,我需要来自两个表的结果。