Как сравнивать обнуляемые поля без JPA - PullRequest
0 голосов
/ 05 сентября 2018

Я использую JPA (EclipseLink) в своем проекте.

У меня есть объект с именем CelulaArmazem, который имеет produto и cliente, которые могут быть нулевыми или нет.

Следующий jpql является примером того, что я пытаюсь сделать. Я хочу получить CelulaArmazem, которые имеют max(dataInclusao) для пары produto и cliente.

Этот запрос возвращает данные только в том случае, если cliente не равно нулю, но мне нужны данные, когда 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)) )

Ошибка при попытке доступа к cliente.id нулевого объекта.

Как мне избежать этой проблемы?

1 Ответ

0 голосов
/ 05 сентября 2018

Спасибо @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) ) ) 
...