Применение параметров нумерации страниц к списку «один ко многим» в Grails - PullRequest
5 голосов
/ 10 апреля 2010

У меня есть класс User, который имеетMany = [friends: User]

Сейчас я пытаюсь отобразить список друзей - $ {user.friends}

Однако я хотел бы иметь возможность применять параметры, как я могу, например, с User.findAllBy (пользователь, [max: 10, sort: 'dateCreated', order: 'desc "])

Может ли кто-нибудь любезно сказать мне, как это сделать на одном-многих в Grails / Groovy?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2010

Я бы использовал HQL:

String hql = '''
select u from User u, User u2
where u in elements(u2.friends) and u2=:user
order by u.dateCreated desc
'''
int max = ...
int offset = ...
def friends = User.executeQuery(hql, [user: user], [max: max, offset: offset])

Вы можете попытаться отфильтровать коллекцию друзей, но как только вы что-то с ней сделаете, она будет полностью загружена из базы данных, поэтому, если вам нужно всего 10 экземпляров, вы потратите впустую все остальные.

0 голосов
/ 11 апреля 2010

Я только что наткнулся на плагин GORM Labs для Grails, который предлагает следующую функциональность

«Для каждого свойства hasMany» теперь существует связанный метод, который принимает свойства разбиения на страницы («смещение» и «макс.»).") и создает соответствующую страницу. Существует также свойство экземпляра countBars, которое будет предоставлять общий размер коллекции" bars ". Все это делается с помощью отдельного запроса к базе данных, если коллекция не была инициализирована ранее, поэтому выможно избежать загрузки всех элементов коллекции "

http://www.grails.org/plugin/gorm-labs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...