public List findByPage(final String hql, 
final int offset, final int pageSize)
{
//通过一个HibernateCallback对象来执行查询
List list = getHibernateTemplate()
.executeFind(new HibernateCallback()
{
//实现HibernateCallback接口必须实现的方法
public Object doInHibernate(Session session)
throws HibernateException, SQLException
{
//执行Hibernate分页查询
List result = session.createQuery(" from Log")
.setFirstResult(1)
.setMaxResults(20)
.list();
return result;
}
});
return list;
}怕传进来的参数有错,红色数字特意改的 报错如下:org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:615)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeFind(HibernateTemplate.java:343)
hibernateFactory.MySupportHibernate.findByPage(MySupportHibernate.java:32)
com.zoye.oa.tool.MemberServiceImpl.queryForPage(MemberServiceImpl.java:30)
com.zoye.oa.action.LogAction.findAll(LogAction.java:60)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

解决方案 »

  1.   

    看看hibernateFactory.MySupportHibernate.findByPage(MySupportHibernate.java:32)
    第32行  再找找
      

  2.   

    Query query=session.createQuery(queryString);
    query.setFirstResult(1);
    query.setMaxResults(20);
    result=query.list();
      

  3.   

    这个还真不太明白,一般是用rownum来分页的。
      

  4.   

    List result = session.createQuery(" from Log")
    首先确定你有Log这个类,而不是表
      

  5.   

    这是hibernate自带的分页功能,setFirstResult 是定义从哪一行开始。setMaxResults 是一页显示多少条。
    如果你要实现分页的话最好写setFirstResult((currentPage-1)*pageSize);
    Query query=session.createQuery("from Log");
    query.setFirstResult(1);
    query.setFirstResult((currentPage-1)*pageSize);
    result=query.list();
    应该没有什么问题的。
      

  6.   

    public List list(final Class clazz,final String QBE,final int pageSize,final int currentPage) {
    /***
     * 返回list
     */
    return getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session session)throws HibernateException, SQLException {
    Query cri=session.createQuery(QBE);
    cri.setFirstResult(pageSize*(currentPage-1));
    cri.setMaxResults(pageSize);
    return cri.list();
    }
    });
    }
    hibernate 自带分页
      

  7.   

    异常问题,是说hql异常,不能执行,你看看你那hql真写对了
      

  8.   

    打印下hql或者sql语句看看,是不是哪里弄错了
      

  9.   

    Query query=session.createQuery("from Log");
    //query.setFirstResult(1);
    //query.setMaxResults(20);

    result=query.list();加上注释就查出来了,但是不能分页
      

  10.   

    大家帮忙看看,到底是哪里写的有问题
    Xaction.java
    public String findAll(){
    this.pageBean = memberService.queryForPage(30, page);
    return "loginfo";
    }Xserver.java
    public PageBean queryForPage(int pageSize,int page){
    final String hql = " from Log order by ltime desc";//查询语句    
    int allRow = getAllRowCount(hql);//总记录数    
    int totalPage = PageBean.countTotalPage(pageSize, allRow);//总页数    
    final int offset = PageBean.countOffset(pageSize, page);//当前页开始记录    
    final int length = pageSize;//每页记录数    
    final int currentPage = PageBean.countCurrentPage(page);
    List<Log> list =findByPage(hql,offset, length);//"一页"的记录          
    //把分页信息保存到Bean中    
    PageBean pageBean = new PageBean();    
    pageBean.setPageSize(pageSize);
    pageBean.setCurrentPage(currentPage);    
    pageBean.setAllRow(allRow);    
    pageBean.setTotalPage(totalPage);    
    pageBean.setList(list);    
    pageBean.init();    
    return pageBean;
    }Xhibernate.java
    public List findByPage(final String hql, 
    final int offset, final int pageSize){
    //通过一个HibernateCallback对象来执行查询
    List list = getHibernateTemplate()
    .executeFind(new HibernateCallback()
    {
    //实现HibernateCallback接口必须实现的方法
    public Object doInHibernate(Session session)
    throws HibernateException, SQLException
    {
    //执行Hibernate分页查询
    Query query=session.createQuery(hql);
    query.setFirstResult(offset);
    query.setMaxResults(pageSize);
    List result=query.list();
    return result;
    }
    });
    return list;
    }
      

  11.   

    搞不定了,大家来帮忙啊没有
    query.setFirstResult(1);
    query.setMaxResults(20);
    可以欲行,打印出来的
     select
            log0_.lsn as lsn5_,
            log0_.loperator as loperator5_,
            log0_.ldescribe as ldescribe5_,
            log0_.lsql as lsql5_,
            log0_.ltime as ltime5_ 
        from
            zoyeoa.dbo.log log0_ 
        order by
            log0_.ltime desc

    query.setFirstResult(1);
    query.setMaxResults(20);
    不能运行,打印出:
        select
            log0_.lsn as lsn5_,
            log0_.loperator as loperator5_,
            log0_.ldescribe as ldescribe5_,
            log0_.lsql as lsql5_,
            log0_.ltime as ltime5_ 
        from
            zoyeoa.dbo.log log0_ 
        order by
            log0_.ltime desc limit ?
      

  12.   

    select
      log0_.lsn as lsn5_,
      log0_.loperator as loperator5_,
      log0_.ldescribe as ldescribe5_,
      log0_.lsql as lsql5_,
      log0_.ltime as ltime5_  
      from
      zoyeoa.dbo.log log0_  
      order by
      log0_.ltime desc limit ?用的MySQL?
    你试下 用hql = from Log order by ltime desc limit ?,?
    query.setParameter(0, 起始行数),query.setParameter(1,查询行数),
    看这样能不能出来
      

  13.   

    hql = " from Log order by ltime desc limit ?,?"
    query.setParameter(0, 1);
    query.setParameter(1, 30);org.springframework.orm.hibernate3.HibernateSystemException: ordinal parameter mismatch; nested exception is org.hibernate.HibernateException: ordinal parameter mismatch
    org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:661)
    org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
    org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
    org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
    org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:917)
      

  14.   

    确定你的是mysql数据库?
    按照你的输出你配置的方言应该是mysql,但是如果你的数据库不是mysql是oracle,那肯定就有问题了。简言之:问题应该是配置的数据库方言跟实际使用的数据库不一致。可以看看这篇文章http://www.javaeye.com/topic/261
      

  15.   

    我竟然遇到的问题和楼主一模一样。
    数据库是HSQLDialect,