繁体   English   中英

java持久性内存泄漏

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM