我在项目上使用的是JPA(EclipseLink)。
我有一个名为CelulaArmazem
的对象,它有一个produto
和一个cliente
,可以为空或不为空。
以下jpql是我尝试执行的示例。我想得到CelulaArmazem
和max(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)) )
时,它似乎失败了。
如何避免这个问题?
答案 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) ) )