2012-03-14 7 views
2

私は以下のエンティティ構造を持っています。JPQL(Hibernateを使用)は、クエリにフィールドを追加することが望ましくありません。

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は私がそれを要求しなかったにもかかわらず、ScheduleEventに参加しようとしていること、

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 ... 

あなたが見ることができます。問題は、次の生成休止状態、です。明らかに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_'が、クエリの残りの部分を追加します同じです。 –

+1

上記のように、 'count(s.event)'を 'count(e.id)'に置き換えてください。クエリで暗黙的な結合を使用しないと、この追加テーブルがfrom句に追加される理由がわかりません。 –

+0

華麗な、ありがとう! –

関連する問題