Hibernate Grails通过滚动快速获取

Hibernate Grails通过滚动快速获取,hibernate,grails,Hibernate,Grails,我试图滚动浏览namedQuery的结果集。为了避免N=1问题,我将fetch参数设置为eager。我还对不同的顶级对象集感兴趣。因此,我的控制器闭包如下所示: def list = { params.max = Math.min(params.max ? params.int('max') : 25, 50) params.fetch=[tasks:"eager"] def requests = Request.activeOnly.ope

我试图滚动浏览namedQuery的结果集。为了避免N=1问题,我将fetch参数设置为eager。我还对不同的顶级对象集感兴趣。因此,我的控制器闭包如下所示:

def list = {
        params.max = Math.min(params.max ? params.int('max') : 25, 50)
        params.fetch=[tasks:"eager"]
        def requests =    Request.activeOnly.open.listDistinct(params)
...
}
我看到的问题是,查询返回的请求对象少于25个。相反,它返回一个联合结果集的25行,这不是我想要的。我如何重组它?顺便说一下,“select”fetch非常有效,但会产生26个查询。 谢谢
Dmitry.

不能将最大结果应用于对集合执行联接提取的查询,因为最大结果应用于结果集中返回的行数,而不是实体数

在本例中,我所做的是第一次查询,仅获取根实体的ID(
请求
),然后第二次查询,使用in子句选择实体及其获取的集合:

// first query, with max results applied: returns 25 IDs
select request.id from Request request where ...

// second request:
select request from Request request 
left join fetch request.tasks 
where request.id in (:setOfIdsReturnedByTheFirstQuery)