2012-03-14 58 views
2

我有一个以下的实体结构。JPQL(与休眠)添加字段查询,这是不希望的

Venue -- n:1 -- Schedule -- 1:n -- Event 

我有一个查询来获取所有日程安排的计数场地:

SELECT v, count(s.event) FROM Venue v 
LEFT JOIN i.schedule s 
GROUP BY i.id ORDER BY count(s.event) asc; 

的问题是,这个查询永不输出场馆,具有零个事件。问题是与Hibernate,产生如下:

select ..., count(schedule4_.event_id) as col_7_0_ 
from Venue venue0_ 
left outer join event_schedule schedule4_ on venue0_.id=schedule4_.venue_id, 
    Event event5_ 
where schedule4_.event_id=event5_.id and ... 

你可以看到,Hibernate试图加入EventSchedule即使我没有要求。显然,如果Schedule不存在,加入Event没有任何意义。

(我简化了查询,如果有错别字,它不应该对问题有任何影响)。

回答

1

尝试用下面的查询:

select v.id, count(e.id) from Venue v 
left join v.schedule s 
left join s.events e 
group by v.id order by count(e.id) asc; 
+0

我已经尝试过 - 它只是增加了'左外连接上schedule4_.event_id = event5_.id事件event5_,事件event6_',但其余查询是一样的。 – 2012-03-14 11:32:58

+1

确保你用'count(e.id)'替换'count(s.event)',如上所示。如果不在查询中使用任何隐式联接,我不明白为什么它会在from子句中添加此附加表。 – 2012-03-14 12:26:36

+0

辉煌,谢谢! – 2012-03-14 15:47:05