我使用的是Oracle 11g XE,以下HQL无法按预期工作。由于某种原因,它仍然会返回两次相同的值。
@Query("SELECT y FROM Oferta y, ClassificacaoOfertaBanco c
LEFT JOIN c.oferta
LEFT JOIN c.banco WHERE y.id IN
(SELECT DISTINCT (o.id) FROM Oferta o
JOIN o.empresas e WHERE o.id NOT IN
(SELECT black.id FROM Banco b
JOIN b.blackList black WHERE b.id = ?1) AND o.dataRemocao IS NULL)
ORDER BY CASE c.classificacao WHEN NULL THEN y.classificacao ELSE
c.classificacao END DESC, y.divulgacaoDe DESC")
我在子查询上使用distinct,因为我的Oferta对象有一些Lob字段,并且Oracle不允许对它们进行区分。
有人能帮助我吗?
编辑: 经过几次测试后,我确定发生这种情况的原因是我从2个表中选择的事实。我仍然不知道如何解决它。
答案 0 :(得分:0)
也许你想要的是:
@Query("SELECT c.oferta FROM ClassificacaoOfertaBanco c
LEFT JOIN c.oferta
LEFT JOIN c.banco WHERE c.oferta.id IN
(SELECT DISTINCT (o.id) FROM Oferta o
JOIN o.empresas e WHERE o.id NOT IN
(SELECT black.id FROM Banco b
JOIN b.blackList black WHERE b.id = ?1) AND o.dataRemocao IS NULL)
ORDER BY CASE c.classificacao WHEN NULL THEN c.oferta.classificacao ELSE
c.classificacao END DESC, c.oferta.divulgacaoDe DESC")
我还没有对此进行测试,而且我没有您的数据模型,但我们的想法是从单个基表或实体中进行选择并遵循关系。