有这么个情况,我需要从数据库读比较多的数据(比如5W条)发送到客户端,数据库用的postgresSQL,web容器用的tomcat,现在的处理办法是一次全读处理放到内存中,然后根据客户端的网络判断分批发送的量进行分批发送,这种处理方法在用户不多的情况不会出问题,但如果比较多的用户同时都需要传输5W条数据,(这5W条记录不一定相同,所以不能公用数据),就会出现tomcat内存溢出,现在想考虑用Hibernate的那个分页读取,采用滚动的结果集,但这种滚动结果集是不是也是把所有数据都先读内存中呢?
  希望能详解下

解决方案 »

  1.   


    public List<Object> query(PageCommon pageComon)
    List<Object> resultList = null;
    Session hibernateSession = getSession();
    try {
    String queryString = "from Table T where ...";
    Query query = hibernateSession.createQuery(queryString);
    query.setFirstResult(pageCommon.getFirstNum()).setMaxResults(pageCommon.getPAGENUM());
    resultList = query.list();
    }catch(Exception ex) {
    ex.printStackTrace();
    }finally {
    hibernateSession.close();
    }
    }PageCommon是我们的一个分页类,你可以改为自己的分页类
      

  2.   

    现在的我的目的不是说去用分页,而是如何去处理那么大的记录的频繁读取以及发送。如果像hibernate的分页效果也是在把数据读到内存中后才实现的,那就没什么意义。