public List<Message> getMessageList(int showCount,int currentPage){
                   String hql="select title,employeeId,publishTime from (select a.title,a.employeeId,a.publishTime, rownum rn from (select title,employeeId,publishTime from Message)a  where rownum<=?)b where rn>?";
                   List<Message> list =this.getHibernateTemplate().find(hql,new Object[]{showCount*currentPage,(currentPage-1)*showCount}); 
return list;                               
}关于这个分页HQL语句查询问题,总是报错:unexpected token: ( near line 1, column 42 [select title,employeeId,publishTime from (select a.title,a.employeeId,a.publishTime, rownum rn from (select title,employeeId,publishTime from Message)a where rownum<=?)b where rn>?] 
unexpected token: ( near line 1, column 42 [select title,employeeId,publishTime from (select a.title,a.employeeId,a.publishTime, rownum rn from (select title,employeeId,publishTime from Message)a where rownum<=?)b where rn>?]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 1, column 42 [select title,employeeId,publishTime from (select a.title,a.employeeId,a.publishTime, rownum rn from (select title,employeeId,publishTime from Message)a where rownum<=?)b where rn>?] 求朋友们帮忙啊,坐等!!!谢啦hql

解决方案 »

  1.   

    hibernate不是有自己的分页实现吗?  干嘛不用?
    你可以用他的分页。然后show_sql
      

  2.   

    (select title,employeeId,publishTime from Message)a where rownum<=?)b where rn>?
    你看你少了空格哎!
    (select title,employeeId,publishTime from Message) a where rownum<=?) b where rn>?
    看看2个的不同吧!
      

  3.   

    何必这么写呢?hibernateTemplate对分页查询做了很好的封装啊。private List<Book_view> paging(final int pageSize,
        final int pageNow, final String hql) {
    return hibernateTemplate.executeFind(new HibernateCallback() {
        public Object doInHibernate(Session session)
        throws HibernateException, SQLException {
    Query query = session.createQuery(hql);
    query.setFirstResult((pageNow - 1) * pageSize);
    query.setMaxResults(pageSize);
    List list = query.list();
    return list;
        }
    });
        }用setFirstResult来设定开始的位置,用setMaxResults这设定一次查出的条数,这样传入的hql就是一个普通的简单的查询语句
      

  4.   

    String hql="select b.title,b.employeeId,b.publishTime from " +
      "(select a.title,a.employeeId,a.publishTime, rownum rn from " +
      "(select title,employeeId,publishTime from Message) a  where rownum<=?)b where rn(这个rn是查的哪个表中的值)>?";hql语句写规范,还有 rn 是 rownum 的缩写还是两个不同的字段
      

  5.   

    String hql="select b.title,b.employeeId,b.publishTime from " +
                     "(select a.title,a.employeeId,a.publishTime, <span style="color: rgb(255, 0, 0);">rownum rn</span> from " +
                     "(select title,employeeId,publishTime from Message) a  where rownum<=?)b where <span style="color: rgb(255, 0, 0);">rn(这个rn是查的哪个表中的值)</span>>?";
      

  6.   

    String hql="select b.title,b.employeeId,b.publishTime from " +
      "(select a.title,a.employeeId,a.publishTime, rownum rn from " +
      "(select title,employeeId,publishTime from Message) a  where rownum<=?)b where rn>?";CSDN的样式真蛋疼
      

  7.   

    不就是一个oracle分页吗 把语句单独拿出来执行一下 不就行了 
    不懂
      

  8.   

    感谢啦,使用hibernate自带的分页查询果然简单了好多,谢谢谢谢,结了!
      

  9.   

    感谢啦,使用hibernate自带的分页查询果然简单了好多,谢谢谢谢,结了!嗯嗯嗯,我也是最近写项目时在网上看到的