简体   繁体   English

JPQL(带有Hibernate)将字段添加到查询中,这是不需要的

[英]JPQL (with Hibernate) adding fields to query, which are not desired

I have a following entity structure. 我有以下实体结构。

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

I have a query to get counts of all schedule in Venues: 我有一个查询来获取场地中所有日程表的计数:

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

The problem is that this query will never output venues, that have zero events. 问题在于此查询将永远不会输出事件为零的场所。 The problem is with Hibernate, which generates following: 问题在于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 ...

You can see, that Hibernate tries to join Event on Schedule even though I did not request that. 您可以看到,即使我没有要求,Hibernate也会尝试按Schedule加入Event Obviously if the Schedule does not exist, joining Event does not make any sense. 显然,如果Schedule不存在,则加入Event毫无意义。

(I simpified the query, if there is some typo, it should not have any impact on the problem). (我简化了查询,如果有错字,则对问题不会有任何影响)。

Try with the following query: 请尝试以下查询:

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM