java - 使用hibernate读取300万条记录

标签 java sql hibernate select

我是一个 hibernate 菜鸟,我必须使用 Java 中的 hibernate 从 DB2 z/OS 数据库读取 200 万条记录。 (JDBC)

我的问题是,我在 150000 条记录后运行 OutOfMemory。

我听说过批处理等,但我只找到实际插入新记录的解决方案。我想要做的是读取 ArrayList 中的这些记录以供进一步使用。

所以我实际上只是选择数据库的一行来减少数据:

getEntityManager().createQuery("select t.myNumber from myTable t").getResultList();

如果有更好的方法来读取如此大量的记录,那也会很有趣。(也许没有 Hibernate?)

最佳答案

下面是使用hibernate进行批处理的方法。请记住,这并未经过 100% 测试。这是一种伪逻辑。

int i=0;
int batch = 100;
List<myNumber> numList = getEntityManager().createQuery("select t.myNumber from myTable t").setFirstResult(i).setMaxResults(batch).getResultList();

while(numList.size() == batch){
    //process numList
    i+=batch;
    numList = getEntityManager().createQuery("select t.myNumber from myTable t").setFirstResult(i).setMaxResults(batch).getResultList();    
}

Hibernate 文档 setFirstResult()setMaxResults()

关于java - 使用hibernate读取300万条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24505131/

相关文章:

mysql - 事务管理超时问题

java - 用于处理 Map<K, List<V>> 的便捷类

java - maven多模块项目中的循环引用。我能做什么来修复它

java - 程序可以编译,但无法运行

Mysql - 我可以获取子选择结果并在 WHERE 子句中使用它吗?

sql - 根据日期自动在 MySQL 服务器上创建表?

mysql - 如果列 = 1,则添加到 CONCAT()

Java 枚举类型错误

java - 显式加载实体的集合

java - NetBeans Web 应用程序