相关疑难解决方法(0)

HQL - 分页的行标识符

有谁知道HQL是否有关键字来识别ROWID或ROWNUM等行?

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

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

我也无法使用Hibernate标准,因为它不支持我的查询中出现的"HAVING"子句.

我的最后一种方法是使用ROWNUM/ROWID关键字限制结果集.还有其他人有其他建议吗?

java pagination hibernate hql

8
推荐指数
2
解决办法
2万
查看次数

使用HQL进行Hibernate分页

Hibernate分页问题

我有一个与Hibernate分页有关的问题,并且在某种程度上已经解释了这个问题

Mysql分页优化

使用Hibernate的ScrollableResults慢慢读取9000万条记录

Hibernate - HQL分页

分页和排序的问题

Hibernate Row Pagination

细节

来自应用程序的HQL查询:

Query q = session.createQuery("from RequestDao r order by r.id desc");
            q.setFirstResult(0);
            q.setMaxResults(50);
Run Code Online (Sandbox Code Playgroud)

查询返回300万条记录,对于分页,我们只设置了50条记录,分页页面非常慢,因为在每次刷新时我们都会调用查询来获取3百万条记录,而我们只设置50条记录.

我的主要问题是

HQL是否总是进入并命中数据库,或者它是否会进入会话或内存以查找数据,如果它每次都进入数据库并获得结果集那么从性能的角度来看它是非常合适的,什么是最好的解决方案来改进它?

在hibernate中使用HQL有一种方法可以查询数据库并首先获取50条记录,然后根据用户的要求获取其他记录.这个挑战真的让应用程序陷入困境,那么解决这个问题的最佳方法是什么呢?

在日志中生成的HQL查询

from com.delta.dao.RequestDao r order by r.id desc
Run Code Online (Sandbox Code Playgroud)

Hibernate生成的查询

select
    getrequest0_.ID as ID24_,
    getrequest0_.TIME as START3_24_,
    getrequest0_.STAT as STATUS24_,
    getrequest0_.SUM as SUMMARY24_,
    getrequest0_.OUTNAME as OUTPUT7_24_,
    getrequest0_.INPNAME as INPUT8_24_,
    getrequest0_.REQUEST_DATE as requestT9_24_,
    getrequest0_.PARENT_ID as PARENT10_24_,
    getrequest0_.INTER_TYPE as INTERPO60_24_,
    getrequest0_.OPEN_INT as OPEN61_24_,
    getrequest0_.SOURCE_TYPE as SOURCE62_24_,
    getrequest0_.TARGET_TYPE as TARGET20_24_,
    getrequest0_.SOURCE as SOURCE14_24_,
    getrequest0_.COPY_DATA as …
Run Code Online (Sandbox Code Playgroud)

java performance pagination hibernate hql

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

hibernate ×2

hql ×2

java ×2

pagination ×2

performance ×1