Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有DISTINCT子句的查询仍然返回相同的值两次_Java_Spring_Oracle_Hibernate - Fatal编程技术网

Java 带有DISTINCT子句的查询仍然返回相同的值两次

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

我使用的是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 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值。您所处的轨道是正确的。按照你的想法,使用一些双向关系,我让查询开始工作。