【问题标题】:derby error "Subquery is only allowed to return a single column."derby 错误“子查询只允许返回一个列。”
【发布时间】:2015-09-21 23:23:49
【问题描述】:

我在调用调用这个查询的方法时遇到了这个异常:

SELECT s FROM Survey s 
WHERE s.idsurvey NOT IN 
    (SELECT DISTINCT s FROM Useranswer ua 
        JOIN ua.iduser u 
        JOIN ua.idanswer a
        JOIN a.idquestion q
        JOIN q.idsurvey s 
    WHERE 
        ua.iduser.iduser = u.iduser
        AND ua.idanswer.idanswer = a.idanswer
        AND a.idquestion.idquestion = q.idquestion
        AND q.idsurvey.idsurvey = s.idsurvey
        AND u.iduser = :iduser
    )
order by s.dateEnd

有什么帮助吗? 查询似乎没问题。

【问题讨论】:

  • 您在顶级查询(Survey)和子查询(q.idsurvey)中声明了相同的别名s。也许这会导致问题?
  • 我在几分钟前看到JPA 不支持子查询,但我找到了另一个使用本机sql 的解决方案。
  • 显然 JPQL 确实支持一些子查询。但是你有“idsurvey IN Collection of Useranswer objects”这没什么意义

标签: java jpa derby jpql


【解决方案1】:

我试图解决这个问题将近 2 个小时。 我找到了使用本机 sql 的解决方案。

String query = "select s.IDSURVEY, s.DATE_END from survey s where s.IDSURVEY not IN (select distinct s.IDSURVEY from survey s join question q on s.IDSURVEY = q.IDSURVEY join answer a on q. IDQUESTION = a.IDQUESTION join useranswer ua on a.IDANSWER = ua.IDANSWER where ua.IDUSER = "+iduser+") order by s.DATE_END";

return (List<Survey>)em.createNativeQuery(query).getResultList(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多