【发布时间】:2011-02-04 09:09:41
【问题描述】:
我们运行的一些查询有 100000 多个结果,加载它们然后将它们发送到客户端需要很长时间。所以我使用 ScrollableResults 来获得分页结果功能。但我们以大约 50k 个结果(从不完全相同的结果数量)达到最高。
我在 Oracle9i 数据库上,使用 Oracle 10 驱动程序,Hibernate 配置为使用 Oracle9 方言。我尝试使用最新的 JDBC 驱动程序(ojdbc6.jar),问题重现。
我们也跟着一些advice添加了排序子句,但是问题重现了。
这里有一个代码 sn-p 来说明我们的工作:
final int pageSize = 50;
Criteria crit = sess.createCriteria(ABC.class);
crit.add(Restrictions.eq("property", value));
crit.setFetchSize(pageSize);
crit.addOrder(Order.asc("property"));
ScrollableResults sr = crit.scroll();
...
...
ArrayList page = new ArrayList(pageSize);
do{
for (Object entry : page)
sess.evict(entry); //to avoid having our memory just explode out of proportion
page.clear();
for (int i =0 ; i < pageSize && ! metLastRow; i++){
if (sr.next())
page.add(sr.get(0));
else
metLastRow = true;
}
metLastRow = metLastRow?metLastRow:sr.isLast();
sendToClient(page);
}while(!metLastRow);
那么,为什么我得到的结果集在最后告诉我它什么时候应该有更多的结果?
【问题讨论】:
标签: java hibernate scrollableresults