休眠分页机制


问题内容

我正在尝试对查询使用Hibernate分页(PostgreSQL)

我设置setFirstResult(0)setMaxResults(20)我的SQL查询。我的代码如下:

Session session = getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query = session.createQuery("FROM Customers");
query.setFirstResult(0);
query.setMaxResults(20);
List<T> entities = query.list();
session.getTransaction().commit();

但是当查看SQL Hibernate日志时,我仍然看到完整的SQL查询:

Hibernate: select customer0_.id as id9_, customer0_.customer_name as dst2_9_, customer0_.addres as dst3_9_ from tbl_customers customer0_

为什么在Hibernate分页SQL日志查询中没有LIMIT OFFSET?

有人知道Hibernate分页机制吗?

我猜Hibernate将选择所有数据,将数据放入Resultset,然后在Resultset中分页,对吗?


问题答案:

我在查询和休眠回叫中使用。两者都按预期工作。Hibernate
Query执行的结果介于给定的First和Max大小之间。在这里,好像您传递了SQL而不是HQL进行查询。如果是的话,那应该行不通。

-在这里查看我的代码。

        Query query = this.getSession().createQuery("FROM QueryType");
        query.setFirstResult(0);
        query.setMaxResults(20);
        List toDelete = query.list();

并在日志中:

select * from(从MY_TBL_NAME querytype0_选择(选择-所有列名称。(不想在这里共享。)),其中rownum <=?