我有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来返回somme列并使用Group BY。

当我尝试执行它时,出现以下错误:

org.postgresql.util.PSQLException:错误:列“ 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节中

我忘记了什么?

最佳答案

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


这就是问题所在,而Postgres在抱怨什么。为什么在SQL查询中不显示?因为它不在HQL查询中。不使用某些汇总方法(例如sum(),min(),max()等)选择的任何列都必须成为GROUP BY子句的一部分,因为否则DB将不知道如何处理多个值/冲突。

例如,如果有多个借方(借方),应将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))

10-07 17:01
查看更多