1、前言
hibernate的分页查询,代码如下
/**
* 分页查询(适用于Easyui分页)
* 局限:排序仅支持单表
* @param hql HQL 如:'from MyTable o'
* @param pageParams 分页参数
* @return 结果集
*/
@Override
@SuppressWarnings("unchecked")
public List<Entity> queryByPage(String hql, PageParams pageParams) {
try {
if(StringUtils.notNull(pageParams.getOrder())&&StringUtils.notNull(pageParams.getSort())){
hql += " order by o." + pageParams.getSort() + " " + pageParams.getOrder();
}
Query query = getQuery(hql);
query.setFirstResult((pageParams.getPage() - 1) * pageParams.getRows());
query.setMaxResults(pageParams.getRows());
return query.list();
} catch (Exception e) {
e.printStackTrace();
log.error("分页查询出现异常 hql={}",hql, e);
return null;
}
}
说明,hibernate版本为5,数据库为mssql。
2、问题描述
错误日志:
17/06/08 14:12:56 DEBUG spi.SqlExceptionHelper: could not extract ResultSet [n/a]
com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285)
at com.alibaba.druid.filter.FilterChainImpl.preparedSta