使用setMaxResults()在获取数据时没有解决OutOfMemoryError

时间:2016-09-06 11:07:03

标签: java hibernate oracle10g lazy-loading hibernate-criteria

虽然我已经阅读了这里发布的几篇文章和问题,但我仍然无法弄清criteria.setMaxResults()实际如何运作以及为什么它没有解决我的问题。

我使用的数据库是Oracle10g。下面的代码用于延迟加载分页,每页需要获取15行,因此pageSize = 15index取决于您所在的页面。对于第一页,它是0。表中的总行数为60k。

public List<FormObject> fetchFormByParams(FormObjectParameters parameters, int pageSize, int index) {
    Session session = getCurrentSession();
    Criteria criteria = criteriaFromParameters(false, parameters, session);

    if (pageSize > 0) {
        criteria.setMaxResults(pageSize);
        criteria.setFirstResult(index);
    } else {
        criteria.setMaxResults(Integer.MAX_VALUE);
        criteria.setFirstResult(0);
    }

    List<FormObject> result = (List<FormObject>) criteria.list(); //line 163
    return result;
}

执行第163行时,应用程序返回15行需要30-45秒,有时会抛出OutOfMemoryError。此外,当DB中的数据较少(少于100)时,应用程序会在几秒钟内返回15行。如果我使用延迟加载和setMaxResults(),请不要知道为什么会发生这种情况。

我也尝试使用setFetchSize(),但这对我没用,它返回了DB中的所有行,因为它没有使用ROWNUM。也许它与我使用的驱动程序有关,但不幸的是我不允许更改它。

0 个答案:

没有答案