我们正在尝试通过HQL执行以下查询,但我们遇到了问题,此查询显示没有结果。
select s from Serie s where
(s.arrivalSerie is not null and s.arrivalSerie.company.isEnable=1)
or (s.departureSerie is not null and s.departureSerie.company.isEnable=1)
我们通过以下方式抛出此查询:
Query query = em.createQuery("previous query");
query.setFirstResult(initialElement);
在测试此查询时,我们发现此查询的任何部分("或")都可以使用结果执行。但是当执行整个查询时,我们得到0个元素集合。
有什么想法吗?
更新:
可理解的翻译查询将是这样的:
select
s.*
from
serie s,
arrivalSerie a,
company ca,
departureSerie d,
company cd
where
s.idArrivalSerie=a.idArrivalSerie
and a.CompanyCode=ca.CompanyCode
and s.idDepartureSerie=d.idDepartureSerie
and d.CompanyCode=cd.CompanyCode
and (
(
s.idArrivalSerie is not null
)
and ca.isEnable=1
or (
s.idDepartureSerie is not null
)
and cd.isEnable=1
) limit 0,10;
当然,这并未向我们展示MySql客户端上的结果
答案 0 :(得分:0)
s.arrivalSerie.company
在Serie
和ArrivalSerie
之间创建内联接,在ArrivalSerie
和Company
之间创建另一个内联接。内连接将过滤掉所有具有null arrivalSerie的系列,这显然不是你想要的。所以你需要使用左连接:
select s from Serie s
left join s.arrivalSerie arrivalSerie
left join arrivalSerie.company arrivalCompany
left join s.departureSerie departureSerie
left join departureSerie.company departureCompany
where arrivalCompany.isEnable = 1 or departureCompany.isEnable = 1