gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:52 24 4
gpt4 key购买 nike

有谁知道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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com