Java 带有DISTINCT子句的查询仍然返回相同的值两次
我使用的是Oracle11gXe,以下HQL没有按预期工作。出于某种原因,它仍然返回相同的值两次Java 带有DISTINCT子句的查询仍然返回相同的值两次,java,spring,oracle,hibernate,Java,Spring,Oracle,Hibernate,我使用的是Oracle11gXe,以下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
@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不允许在这些字段上使用distinct
有人能帮我吗
编辑:
经过几次测试后,我确信发生这种情况的原因是我从两个表中进行了选择。但我仍然不知道如何解决这个问题。也许你想要的是:
@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")
我没有对此进行测试,也没有您的数据模型,但我的想法是从单个基表或实体中进行选择并遵循关系。
DISTINCT
出现在in
操作符中之后的子查询中。它是无用的,因为(1,2)
中的a与(1,1,2)
中的a是相同的。实际上这让我感到困惑。我还有其他几个查询,它们都使用DISTINCT INDER IN子句,并且它可以按预期工作。此查询与其他查询之间的唯一区别是我从两个表中选择的查询。您的意思是SELECT DISTINC y from of erta y,…
?我编辑了前面的注释,但是“是”从Oferta y中选择“不同的y”
将不起作用,因为对象中的Lob字段。DISTINCTROW不是有效的HQL值。您所处的轨道是正确的。按照你的想法,使用一些双向关系,我让查询开始工作。