db2 count(*)按hibernate标准排序

时间:2013-04-15 10:46:18

标签: db2 hibernate3

我试过这段代码:

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

1 个答案:

答案 0 :(得分:0)

SQL Code -119表示:

  

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

在DB2中,如果要按this_.SYSTEM_LOG_FILE_ID排序,那么必须在GROUP BY子句中。我没有使用Hibernate,但您可以将GROUP BY添加到criteria对象吗?