我是一个 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/