java - Hibernate - Java分页 - 内存不足异常

标签 java hibernate

由于结果集很大,我正在使用以下代码从数据库获取结果。

这是正确的做法吗? 我遇到了内存不足异常,我怀疑是因为这个。

// div is set to 10,000
// i have calculated how many times i need do it using a count query
// and that value is being used in iteration variable

Query bigQ=session.createSQLQuery(bigQuery);

for(int i=0;i<iteration;i++)    
{
    bigQ.setFetchSize(div);                         
    bigQ.setMaxResults(i*div);

    List<Object[]> result=bigQ.list();

    // now i am using the result to get the values 
    for(Object[] a:result)
    {
        // rest of operations
    }
}   

注意:

  1. 我在 jboss run.conf 中设置了足够的 Xms 和 -Xmx。
  2. 我无法使用可滚动集,因为 postgre 驱动程序不支持它。
  3. 我无法使用 createQuery,因为在这种情况下,hibernate 会生成大量查询,因此我使用一个大型连接查询以及 createSQLQuery

最佳答案

您的代码看起来很奇怪 - 对结果进行分页的正确方法是这样的:

bigQ.setFirstResult(i * div);
bigQ.setMaxResults(div);

还要确保您的 session 缓存不会增长 - 如果您的查询仅返回标量值(而不是实体),那么这应该不是问题,但如果您在 //其余操作中加载一些实体,可以。

关于java - Hibernate - Java分页 - 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512690/

相关文章:

java.lang.OutOfMemory错误: Java heap space error during bulk insert to mysql database?

java - 如何在 Java 中将 YAML 列表转换为字符串数组?

java - 具有多个表连接和 sum()、first() 的 HQL

java - org.dom4j.DocumentException : Connection timed out: connect and Nested exception: Connection Nested exception

java - 如何在jsp页面上动态显示数据库中的图像

java - 方法未返回数组的正确值。我究竟做错了什么?

java - JAXB:解码异构数组

java - Spring - 使用嵌套实体发布 JSON 主体不起作用

java - @Transactional(isolation = Isolation.SERIALIZABLE) 重试机制

java - 如何创建可选的外键引用?