【问题标题】:HQL : The column must appear in GROUP BY or in SelectHQL :该列必须出现在 GROUP BY 或 Select 中
【发布时间】:2017-02-23 13:19:54
【问题描述】:

我使用 WrappedBean 进行了这个查询:

buffer.append("SELECT new myPackage.WrappedBean(E.debitant.id,  E.dateCalcul, E.verse, E.incidenceReprise, E.soldeSoumission) ");
buffer.append("FROM " + getEntityClassName() + " E ");
buffer.append("LEFT JOIN E.debitant DT ");
buffer.append("WHERE E.debitant.id = :idDebitant ");
buffer.append("AND YEAR(E.dateCalcul) = :year ");
buffer.append("GROUP BY E.debitant.id");

hqlQuery = session.createQuery(buffer.toString());
hqlQuery.setInteger("idDebitant", idDebitant);
hqlQuery.setInteger("year", year);

我创建了 WrappedBean 来返回一些列和使用 Group BY。

当我尝试执行它时,我得到这个错误:

org.postgresql.util.PSQLException: ERREUR: «complement0_.date_calcul» 列必须出现在 GROUP BY 子句中或必须在 Select 中使用(我将错误翻译成法语)

我的 POSTGRES 查询在 Group BY 中不包含 date_calcul。

另一个问题,在我的查询中我也有这个:

SUM(CASE WHEN YEAR(dateCalcul)=@PECAnnee AND verse>0 THEN verse ELSE 0 END)

我知道在 HQL 中,我们不能在选择时做大小写,因此,我不将 SUM 添加到列 verse

我忘记了什么?

【问题讨论】:

    标签: java hibernate hql


    【解决方案1】:

    我的 POSTGRES 查询在 Group BY 中不包含 date_calcul

    这就是问题所在,也是 Postgres 所抱怨的。为什么不在 SQL 查询中?因为它不在 HQL 查询中。不使用 sum()、min()、max() 等聚合方法而选择的任何列都需要成为 GROUP BY 子句的一部分,否则数据库不知道如何处理多个值/冲突.

    例如,如果有多个借方(借方),应该将E.dateCalcul 的什么值传递给WrappedBean(这很可能是这种情况,否则就不需要 GROUP BY 子句) ?

    所以要解决这个问题,要么使用

    GROUP BY E.debitant.id,  E.dateCalcul, E.verse, E.incidenceReprise, E.soldeSoumission
    

    或使用聚合函数,例如

    WrappedBean(E.debitant.id,  max(E.dateCalcul), min(E.verse), max(E.incidenceReprise), sum(E.soldeSoumission))
    

    【讨论】:

    • 这是我在 PostGres 中的查询:SELECT id_debitant, dateCalcul, verse, soldeSoumission FROM calc_cdr WHERE id_debitant = someValue AND YEAR(dateCalcul) = @PECAnnee GROUP BY id_debitant
    • @Pasja95 好吧,Postgres 也应该抱怨那个查询。查询还包含dateCalcul,但不包含date_calcul。如果前者是正确的名称,那么请查看您的映射,因为这很可能是错误的。
    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2016-05-26
    • 2015-04-20
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多