以块的形式加载SELECT查询的ACTUAL数据(不再执行相同的查询)

时间:2015-05-29 09:32:41

标签: java sql hibernate postgresql hql

假设,如果我执行一个选择查询(HQL)并且它给出100K行作为结果。我想知道是否有一种方法可以在java(或任何其他语言)中加载1K块中的那些100k。查询完成后执行。 我打破它的原因是 - 我不知道那些100K结果将存储在哪里,而我在java中对它们进行处理。但我想使用较少的内存消耗。

  1. 执行查询(使用hql的hibernate条件)(假设100K行结果)
  2. 首先选择1K( 而不在JVM或其他地方加载其他99K,如在休眠中加载延迟
  3. 过程
  4. 选择下一个1K
  5. 从(2)
  6. 重复

    更新 - 我不想再次点击查询。 要么我无法理解任何答案,要么你的人无法理解我的问题

1 个答案:

答案 0 :(得分:0)

首先在两个查询中拆分您的查询。

首先是通过将选择部分更改为SELECT COUNT(o) FROM Object o之类的内容来获取结果集的计数。

发送您现有的查询而不做任何更改。

然后首先运行count查询请求单个结果。它将直接为结果大小的Long值。

然后计算迭代次数:

long pages = Math.ceil(count/1000);

最后但并非最不重要的是迭代计算的网页,并在获得结果之前设置偏移和限制来启动查询。