Java JPQL(使用Hibernate)向查询中添加不需要的字段
我有一个如下的实体结构Java JPQL(使用Hibernate)向查询中添加不需要的字段,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,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(sc
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试图加入日程表上的事件
,即使我没有请求。显然,如果计划
不存在,则加入事件
没有任何意义
(我简化了查询,如果有输入错误,应该不会对问题产生任何影响)。尝试以下查询:
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;
我已经尝试过了-它只是在schedule4上添加了left-outer-join-Event-event5\u。Event\u id=event5\u.id,Event-event6\u
,但是查询的其余部分是相同的。请确保将count(s.Event)
替换为count(e.id)
,如上所示。如果在查询中不使用任何隐式连接,我不明白为什么它会在from子句中添加这个额外的表。