0

我试过这段代码:

List resultList = new ArrayList();
Criteria criteria = createCriteria(SystemLogFile.class);
criteria.add(Expression.eq("clientId", clientId));
criteria.addOrder(Order.desc("systemLogFileId"));
if (page == -1) {
  resultList.add(criteria.setProjection(Projections.rowCount()).uniqueResult());
} else {
  criteria.setFirstResult(page * pageSize);
  criteria.setMaxResults(pageSize);
  resultList = criteria.list();
  setModelsListAsLoaded(resultList);
}
return resultList;

此代码生成以下查询:

select count(*) as y0_ from krn_system_log_file this_ where this_.CLIENT_ID=? order by this_.SYSTEM_LOG_FILE_ID desc

这适用于 oracle 和 mysql,但不适用于 db2!我收到此错误消息: 引起:com.ibm.db2.jcc.am.io:DB2 SQL 错误:SQLCODE=-119,SQLSTATE=42803,SQLERRMC=SYSTEM_LOG_FILE_ID,DRIVER=3.57.82

4

1 回答 1

0

SQL 代码 -119表示:

在 SELECT 子句、HAVING 子句或 ORDER BY 子句中指定的以expression-start开头的表达式未在 GROUP BY 子句中指定,或者它位于具有列函数但没有 GROUP 的 SELECT 子句、HAVING 子句或 ORDER BY 子句中指定了 BY 子句。

在 DB2 中,如果您想要 order by this_.SYSTEM_LOG_FILE_ID,那么它必须在GROUP BY子句中。我不使用 Hibernate,但是您可以将其添加GROUP BY到您的criteria对象中吗?

于 2013-04-15T17:15:38.287 回答