Hibernate查询使用或显示没有结果

时间:2013-10-22 16:24:52

标签: hibernate hql

我们正在尝试通过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客户端上的结果

1 个答案:

答案 0 :(得分:0)

s.arrivalSerie.company

SerieArrivalSerie之间创建内联接,在ArrivalSerieCompany之间创建另一个内联接。内连接将过滤掉所有具有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