gpt4 book ai didi

oracle - Hibernate 分页或批处理

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

问题:如何一次处理(读入)一批 1000 条记录,并确保内存中只有当前一批 1000 条记录?假设我的主键名为“ID” ' 我的 table 叫 Customer

背景:这不是用于用户分页,而是用于编译有关我的表的统计信息。我的可用内存有限,因此我想一次批量读取 1000 条记录。我只是读取记录,它们不会被修改。我读过StatelessSession对于这种事情很有用,我听说有人使用 ScrollableResults .

我尝试过的:目前我正在开发一个定制的解决方案,我在其中实现了 Iterable 并基本上使用 setFirstResult 进行分页。和setMaxResults 。这对我来说似乎很慢,但它允许我一次获取 1000 条记录。我想知道如何更有效地做到这一点,也许可以使用 ScrollableResults 之类的东西。我还不确定为什么我当前的方法这么慢;我按 ID 排序,但 ID 是主键,因此表应该已经以这种方式建立索引。

正如你可能知道的那样,我一直在阅读有关如何做到这一点的零碎内容。如果有人能为我提供完整的方法来做到这一点,我将不胜感激。我知道你必须设置 FORWARD_ONLYScrollableResults那个电话 evict(entity)会将实体从内存中取出(除非您正在进行二级缓存,我还不知道如何检查我是否是二级缓存)。但是,我在 JavaDoc 中没有看到任何方法可以一次读取 1000 条记录。我希望在可用内存不足和网络性能缓慢之间取得平衡,因此通过网络一次发送一个记录实际上不是一种选择。我尽可能使用 Criteria API。感谢您的详细回复。

最佳答案

也许使用oracle的ROWNUM功能会对你有所帮助。
假设我们需要获取表 CUSTOMERS 的 1000 行(pagesize),并且需要获取第二页(pageNumber)

创建并调用像这样的查询可能就是答案

select * from 
(select rownum row_number,customers.* from Customer
where rownum <= pagesize*pageNumber order by ID)
where row_number >= (pagesize -1)*pageNumber

关于oracle - Hibernate 分页或批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15424625/

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