如何比较可空字段没有JPA

时间:2018-09-04 21:08:40

标签: java jpa eclipselink

我在项目上使用的是JPA(EclipseLink)。

我有一个名为CelulaArmazem的对象,它有一个produto和一个cliente,可以为空或不为空。

以下jpql是我尝试执行的示例。我想得到CelulaArmazemmax(dataInclusao)一对的produto的{​​{1}}。

仅当cliente不为null时,此查询才返回数据,但当cliente为null时,我要返回数据。

cliente

当尝试访问空对象的select c from CelulaArmazem c where c.armazem.id = :idArmazem c.dataInclusao = ( select distinct max(c2.dataInclusao) from CelulaArmazem c2 where c2.armazem.id = c.armazem.id and c2.produto.id = c.produto.id and ((c.cliente is null and c2.cliente is null) or (c.cliente.id = c2.cliente.id)) ) 时,它似乎失败了。

如何避免这个问题?

1 个答案:

答案 0 :(得分:0)

感谢@Simon,您的想法可以解决问题:

select c from CelulaArmazem c
left join c.Cliente cl
where
c.armazem.id = :idArmazem
c.dataInclusao = (
    select distinct max(c2.dataInclusao) from CelulaArmazem c2
    left join c2.Cliente cl2
    where
        c2.armazem.id = c.armazem.id and
        c2.produto.id = c.produto.id and
        ( (cl is null and cl2 is null) or 
        ( (cl is not null and cl2 is not null) and (cl.id = cl2.id) ) )