gpt4 book ai didi

java - 从 Hibernate 子列表结果

转载 作者:行者123 更新时间:2023-12-02 07:45:31 25 4
gpt4 key购买 nike

我正在对 hibernate 的一组结果实现分页。目前我正在做

long count = getCountResultForNamedQuery();
List result = getResultForNamedQuery()

这两个查询类似于

select count(*) from addresses where country = 'USA';

select * from addresses where country = 'USA';

对于分页,我通常会更新 getResultForQuery ,以便设置 .setFirstResult 和 setMaxResult 。这将只返回我想要的部分。我必须进行计数,以便知道页面的分页部分要显示多少页。

我想知道我是否可以更有效率。我可以这样做吗

List result = getResultForQuery();
int count = result.size();
List subResult = result.subList(start, end);

这有道理吗?如果可能的话,我尝试只调用一个查询。问题是hibernate有多聪明?当我调用 size 时,它​​会计算它返回的对象外壳,还是会尝试解决所有问题,然后访问数据库?使用哪种模式更好?

如果示例不够清楚,我们深表歉意。我已经尝试尽可能地简化它,但可能简化得太多了!

提前致谢!

最佳答案

您的第二个解决方案是有道理的,但可能会导致性能灾难,因为它会在内存中加载来自美国的所有地址,而您只对它们的计数和这些地址的一小部分感兴趣。当执行查询时,查询会返回一个列表,该列表中填充了查询的所有结果。这就是 setFirstResult 和 setMaxResults 有用的原因。

如果您不关心绝对精确的计数,则可以仅执行一次计数查询,然后对每个页面执行“结果”查询。

关于java - 从 Hibernate 子列表结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929477/

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