2012-03-14 59 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