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