Grails渴望通过滚动获取

时间:2011-10-05 21:55:22

标签: hibernate grails

我正在尝试滚动一个namedQuery的结果集。为了避免N = 1问题,我将fetch param设置为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个Request对象。相反,它返回25行的联合结果集,这不是我想要的。我该如何重组呢?顺便说一下,“select”fetch工作得很好,但会产生26个查询。 谢谢, 梅德。

1 个答案:

答案 0 :(得分:2)

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

在这种情况下,我所做的是第一个查询,它只获取根实体的ID(Request),然后是第二个查询,它使用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)