2012-02-20 143 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 (+)