Grails жаждет получить прокрутку - PullRequest
1 голос
/ 06 октября 2011

Я пытаюсь прокрутить результирующий набор 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 объектов Request. Вместо этого он возвращает 25 строк объединенного результирующего набора, что мне не нужно. Как мне его реструктурировать? Между прочим, выборка "выборка" прекрасно работает, но приводит к 26 запросам. Спасибо, Дмитрий.

1 Ответ

2 голосов
/ 06 октября 2011

Вы не можете применить максимальное количество результатов к запросу, который выполняет выборку соединения для коллекции, поскольку максимальное значение применяется к числу строк, возвращаемых в наборе результатов, а не к числу объектов.

В данном случае я делаю первый запрос, который выбирает только идентификаторы корневого объекта (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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...