Query提供了分页查询方法。
                Query queryObject = session.createQuery(queryString);
      queryObject.setFirstResult(firstResult);
         queryObject.setMaxResults(maxResult);
         return queryObject.list();
但是getHibernateTemplate没有这方法。我之前用的都是类似
            List list = getHibernateTemplate().executeFind(new HibernateCallback(){
                public Object doInHibernate(Session session) throws HibernateException, SQLException {
                 Query queryObject = session.createQuery(queryString);
         queryObject.setFirstResult(firstResult);
         queryObject.setMaxResults(maxResult);
         return queryObject.list();
                }});
            return list;
这样的写法实现分页。但是这两重套用看得我眼花。
我想把分页的功能写在hql语句里。
例如
String queryString = "from table as model where model."
+ propertyName + "= ?" + " limit 0,10";
return getHibernateTemplate().find(queryString, value);
这样可以避免两重套用.
            List list = getHibernateTemplate().executeFind(new HibernateCallback(){
                public Object doInHibernate(Session session) throws HibernateException, SQLException {请教下,把分页用能写在hql里面,效率会不会降低?哪种写法效率高些?

解决方案 »

  1.   

    直接使用SQL語句中實現分頁讀取速度最快,在HQL中不會低些。
      

  2.   

    都可以........不过sql还是更好些....
      

  3.   

    谢谢chengchao123,请大家继续指点。
      

  4.   

    没什么区别 重要的是SQL/HQL效率问题
      

  5.   

    我通常都是用:List list = getHibernateTemplate().executeFind(new HibernateCallback(){
      public Object doInHibernate(Session session) throws HibernateException, SQLException {
      Query queryObject = session.createQuery(queryString);
      queryObject.setFirstResult(firstResult);
      queryObject.setMaxResults(maxResult);
      return queryObject.list();
      }});
      return list;
    这种方法进行分页的。期待着有更好的分页方法
      

  6.   

    效率 都差不多。。HQL 的最底层 也是 SQL 那种语句的拼接。~!
    hibernate 只不过是对原有的 数据库连接中的公用方法进行了封装~!
      

  7.   

    就用hibernate提供的分页功能就好了。