java - HQL - 用于分页的行标识符

标签 java hibernate pagination hql

有谁知道HQL有没有关键字来标识行,比如ROWID或者ROWNUM?

我想用 HQL 实现分页,但我不能使用 .setMaxResult() 或 .setFirstResult() 因为我不直接使用 session 对象,因此不使用查询对象,而只是创建我的查询作为一个字符串并使用 .find() 方法。

我尝试在查询中使用 LIMIT 和 OFFSET,但 HQL 似乎忽略了这些关键字,并且无论如何都会将整个结果返回给我。

我也无法使用 Hibernate 条件,因为它不支持出现在我的查询中的“HAVING”子句。

我最后的办法是使用 ROWNUM/ROWID 关键字来限制结果集。还有其他人有任何其他建议吗?

最佳答案

这是 hibernate 大放异彩的一种情况:

hql 查询的典型解决方案。

int elementsPerBlock = 10;
int page = 2;

return  getSession().createQuery("from SomeItems order by id asc")
            .setFirstResult(elementsPerBlock * (page-1) + 1 )
            .setMaxResults(elementsPerBlock)
            .list();

hibernate 会根据其 sql 方言将其转换为数据库可以理解的模式。 在 oracle 上,它将创建一个 ROWNUM < X 的子查询。 在 postgresql 上它会发出 LIMIT/OFFSET 在 msSQL 服务器上,它会发出一个 TOP..

据我所知,使用“纯”hql 是不可能实现这一点的。

关于java - HQL - 用于分页的行标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/489360/

相关文章:

symfony - 学说 : Pagination with left Joins

java - 解锁另一个线程java拥有的锁

java - 在 Azure Java Functions 中,无法读取测试/生产环境中的 host.json 值

java - 如何检测 Java 中 if else 语句中的所有特殊字符?

java - 如何验证 hibernate validator 上的所有组?

javascript - 使用 Bootstrap 对网页上的一组 <p> 元素进行分页

java - 有一种干净的方法可以在 Spring Web API 中将字符串作为 json 返回吗?

java - PreparedStatement 缓存 - 这是什么意思(它是如何工作的)

java - HQL 按表达式排序

java - reSTLet 分页 HttpClientHelper 启动/停止