在我的应用程序中,我有一个会计表,其中包含金额、付费金额、罚款等列。在这里,我需要通过添加这 3 列并将其与零匹配来查找余额为零的帐户。 下面是我的 hql 查询,结果出现错误。
query = session.createQuery("FROM Accounts where accountId = :accId and SUM(amount + paidAmount + fine) = 0 order by name");
错误为:
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not extract ResultSet
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1613)
.......
... 106 more
Caused by: java.sql.SQLException: Invalid use of group function
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57)
... 121 more
如何使用 HQL 查询执行此 where 条件
您有一个简单的语法错误。
您的查询应该是:
query = session.createQuery("FROM Accounts where accountId = :accId and (amount + paidAmount + fine) = 0 order by name");
SUM()
不能这样使用。
或者您可能正在尝试做一些相当于:
SELECT * FROM `table` GROUP BY <some_column> HAVING SUM(column1+column2)>0 ORDER BY column_name ASC
如果是这种情况,您可以使用
GROUP BY
和 HAVING
。