有谁知道HQL是否具有关键字来标识诸如ROWID或ROWNUM之类的行?

我想用HQL实现分页,但是我不能使用.setMaxResult()或.setFirstResult(),因为我不直接使用 session 对象,因此不使用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 在postgresql上,它将发出一个LIMIT/OFFSET
在msSQL服务器上,它将发出一个TOP。

据我所知,不可能使用“纯” hql实现此目的。

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

10-12 21:28