Java持久性内存泄漏 [英] java persistence memory leaks
本文介绍了Java持久性内存泄漏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在一个表中有1M行,我想获取所有这些行.但是,当我尝试通过分页获取jpa的所有行时,出现Java堆错误.你以为我错过了什么吗?任何建议
int counter = 0;
while (counter >= 0) {
javax.persistence.EntityManager em = javax.persistence.Persistence
.createEntityManagerFactory("MyPU")
.createEntityManager();
Query query = em.createQuery("select m from mytable m");
java.util.Collection<MyEntity> data = query
.setFirstResult(counter).setMaxResults(1000).getResultList();
for(MyEntity yobj : data){
System.out.println(obj);
}
counter += 1000;
data.clear();
em.clear();
em.close();
}
解决方案
由于您始终使用本机SQL,您是否不能直接在SQL语句中指定LIMIT :counter, 1000
(如果使用Oracle,则为ROWNUM BETWEEN :counter AND 1000
)?>
I have 1M rows in a table and I want to get all of them. But when I try to get all rows with jpa by pagination then I get java heap error. Do you think that am I missing something? Any advice
int counter = 0;
while (counter >= 0) {
javax.persistence.EntityManager em = javax.persistence.Persistence
.createEntityManagerFactory("MyPU")
.createEntityManager();
Query query = em.createQuery("select m from mytable m");
java.util.Collection<MyEntity> data = query
.setFirstResult(counter).setMaxResults(1000).getResultList();
for(MyEntity yobj : data){
System.out.println(obj);
}
counter += 1000;
data.clear();
em.clear();
em.close();
}
解决方案
Since you use native SQL anyway, can't you specify the LIMIT :counter, 1000
(or ROWNUM BETWEEN :counter AND 1000
if using Oracle) directly in your SQL statement?
这篇关于Java持久性内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文