以下是我的带参分页查询及调用代码: @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);一行时,跳入一个无代码界面,也不报错。望高人指点!!!

解决方案 »

  1.   

                            if (parameters != null) {
                                for (int i = 0; i < parameters.length; i++) {
                                    query.setParameter(i, parameters[i]);
                                }
                            }Query query = session.createQuery(hql); 这句移到下面来 看看
      

  2.   

    总觉得 你这个 hql = "from LoginUser where userId=?"; 拼接有问题、
    要是传两个id过来呢?
      

  3.   

    public List<V> findByPage(final PageBean pb,final String hql,final Object... params) {
    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里面的,下班咯。
      

  4.   


    放下面怎么理解?
    这个时个,上面的query对象都不没有创建,如何setParameter?
      

  5.   

    你在调试的时候跳到个无代码界面的时候再继续点那个debug的Resume按钮看它报什么错
      

  6.   


    调分页之前没有用session啊,而且都是调用hibernate自带的方法。
      

  7.   

    没有报错?你用try catch把那些语句包起来试试看。。
      

  8.   


    都试过了,没用,如果我不带参查询的话,这句就没问题,只要参数查询就会出这个问题。我现在打算下载一个有源码的spring-hibernate3.jar包,来试试。
      

  9.   

    困扰了几天的问题,今天终于解决了。感谢各位的帮助。谢谢。总结一下解决思路:我新建立了一个工程,只加入spring2.0和hibernate3.3支持,使用前面的代码,测试执行结果正常,说明这个问题可能是struts2导致的,或者是struts2与前二者的整合导致。然后安排单元测试的方法,在原工程中测试,发现运行报错。是hibernate3.3与struts2中分别包含 antlr-2.7.6.jar和anltr-2.7.2.jar包,版本冲突报错。移除anltr-2.7.2.jar包之后,问题就OK了。心得:ssh整合问题多,有问题不可怕,就怕不报错。
      

  10.   

    应该是获得的session为空,debug看下