以下是我的带参分页查询及调用代码: @Override
public List list(int offset, int pageSize, String searchKey) {
// HQL 语句中的字段和表名,必须使用配置文件中定义的名字
// return this.getHibernateTemplate().find(
// "from LoginUser order by lastLoginTime desc");
String hql = "";
Object[] parameters = { searchKey };
if (null == searchKey || "".equals(searchKey)) {
hql = "from LoginUser order by lastLoginTime desc";
parameters = null;
} else {
hql = "from LoginUser where userId=?";
} List result = this.getListForPage(hql, parameters, offset, pageSize);
return result;
} /**
* 使用 hql 语句进行操作
*
* @param hql
* HSQL 查询语句(使用回调函数访问外部变量,必须是final的)
* @param offset
* 开始取数据的下标
* @param length
* 读取数据记录数
* @return List 结果集
*/
public List getListForPage(final String hql, final Object[] parameters,
final int offset, final int length) { List list = this.getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException { Query query = session.createQuery(hql); if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}当不带参数时,查询正常。当带参数时,调试执行到Query query = session.createQuery(hql);一行时,跳入一个无代码界面,也不报错。望高人指点!!!
public List list(int offset, int pageSize, String searchKey) {
// HQL 语句中的字段和表名,必须使用配置文件中定义的名字
// return this.getHibernateTemplate().find(
// "from LoginUser order by lastLoginTime desc");
String hql = "";
Object[] parameters = { searchKey };
if (null == searchKey || "".equals(searchKey)) {
hql = "from LoginUser order by lastLoginTime desc";
parameters = null;
} else {
hql = "from LoginUser where userId=?";
} List result = this.getListForPage(hql, parameters, offset, pageSize);
return result;
} /**
* 使用 hql 语句进行操作
*
* @param hql
* HSQL 查询语句(使用回调函数访问外部变量,必须是final的)
* @param offset
* 开始取数据的下标
* @param length
* 读取数据记录数
* @return List 结果集
*/
public List getListForPage(final String hql, final Object[] parameters,
final int offset, final int length) { List list = this.getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException { Query query = session.createQuery(hql); if (parameters != null) {
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}
query.setFirstResult(offset);
query.setMaxResults(length);
List list = query.list();
return list;
}
});
return list;
}当不带参数时,查询正常。当带参数时,调试执行到Query query = session.createQuery(hql);一行时,跳入一个无代码界面,也不报错。望高人指点!!!
for (int i = 0; i < parameters.length; i++) {
query.setParameter(i, parameters[i]);
}
}Query query = session.createQuery(hql); 这句移到下面来 看看
要是传两个id过来呢?
return getHibernateTemplate().executeFind(new HibernateCallback(){ public Object doInHibernate(Session session)
throws HibernateException, SQLException {
String totalPageHql = "select count(*) " + hql.substring(hql.toLowerCase().indexOf("from"));
Query totalQuery = session.createQuery(totalPageHql);
for (int i = 0; i < params.length; i++) {
totalQuery.setParameter(i, params[i]);
}
int total = Integer.parseInt(String.valueOf((Long)totalQuery.uniqueResult()));
pb.setTotalRecords(total);
Query query = session.createQuery(hql);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
query.setFirstResult(pb.getFirstResult());
query.setMaxResults(pb.getPageSize());
List<V> list = query.list();
return list;
}
});
}你参考下吧,我的是把分页放在一个JAVABEAN里面的,下班咯。
放下面怎么理解?
这个时个,上面的query对象都不没有创建,如何setParameter?
调分页之前没有用session啊,而且都是调用hibernate自带的方法。
都试过了,没用,如果我不带参查询的话,这句就没问题,只要参数查询就会出这个问题。我现在打算下载一个有源码的spring-hibernate3.jar包,来试试。