[英]java persistence memory leaks
我在表中有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
(或ROWNUM BETWEEN :counter AND 1000
如果使用Oracle)?
请注意,您在每次迭代时创建EntityManagerFactory
新实例,但不要关闭它。 也许最好使用一个工厂:
int counter = 0;
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("MyPU");
while (counter >= 0) {
javax.persistence.EntityManager em = emf.createEntityManager();
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.