2012-02-20 378 views
0

我在HQL嘗試使用相關查詢(在SELECT子句中),第一次和我遇到的問題:相關子查詢

我的HQL查詢的類型爲:

SELECT CMP.id ,CMP.Name, CMP.startDate, CMP.endDate, CMPTTL.impr, CMPTTL.cnImpr,(CMPTU.id.login 
     FROM Z CMPTU 
     WHERE CMPTU.id.cId=CMP.id AND CMPTU.id.login = '[email protected]') 
FROM X CMP, Y CMPTTL 
WHERE CMP.Status = 'L' AND CMP.id = CMPTTL.Id (+) 

作爲每Hibernate文檔時我執行「HQL子查詢只能出現在選擇或其中clauses.Even相關子查詢(即參考別名在外部查詢子查詢)是允許的。

但我的HQL我有這個錯誤

org.hibernate.QueryException:聚合函數之前的預期(在SELECT

我見過休眠的selectParser,它需要一個聚合函數,每當「 (「遇到。

請提前

+0

您使用的是SQL還是HQL?從我所知道的,你不能在你的HQL中有外部連接的**(+)**。如果你刪除子查詢是其餘部分工作正常? – ManuPK 2012-02-20 13:33:32

+0

@Manu PK:我使用HQL,(+)被接受,因爲我使用Oracle作爲數據庫,是如果我刪除子查詢,那麼我的查詢工作正常 – Amandeep 2012-02-21 12:06:16

+0

我已更新答案,讓我知道如果這是工作?如果工作正常,接受答案是正確的。 – ManuPK 2012-02-22 13:39:39

回答

0

的問題可能是因爲,你是在同一個查詢Zid多次參加建議

感謝。我已修改您的子查詢以使用連接的別名。我無法測試它,但希望工作。

SELECT CMP.id ,CMP.Name, CMP.startDate, CMP.endDate, 
CMPTTL.impr, CMPTTL.cnImpr, 
    (CMPTUid.login FROM Z CMPTU join CMPTU.id as CMPTUid 
     WHERE CMPTUid.cId=CMP.id AND CMPTUid.login = '[email protected]') 
FROM X CMP, Y CMPTTL 
WHERE CMP.Status = 'L' AND CMP.id = CMPTTL.Id (+)