加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – HQL – 分页的行标识符

发布时间:2020-12-14 05:49:19 所属栏目:Java 来源:网络整理
导读:有没有人知道HQL是否有关键字来识别ROWID或ROWNUM等行? 我想用HQL实现分页但是我无法使用.setMaxResult()或.setFirstResult(),因为我不直接使用会话对象,因此不使用Query对象而只是创建我的查询一个字符串并使用.find()方法. 我在我的查询中尝试使用LIMIT和
有没有人知道HQL是否有关键字来识别ROWID或ROWNUM等行?

我想用HQL实现分页但是我无法使用.setMaxResult()或.setFirstResult(),因为我不直接使用会话对象,因此不使用Query对象而只是创建我的查询一个字符串并使用.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<创建一个subselect. X.
在postgresql上它会发出LIMIT / OFFSET
在msSQL服务器上它将发出一个TOP ..

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读