Применение опций разбиения на страницы к one-many перечисляет в Grails

У меня есть Пользовательский класс это hasMany = [friends:User]

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

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

Кто-то может любезно сказать мне, как сделать это на one-many в Grails / Groovy?

5
задан RyanLynch 10 April 2010 в 03:19
поделиться

2 ответа

Я бы использовал 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 экземпляров, вы потратите впустую загрузку всех остальных.

3
ответ дан 15 December 2019 в 06:21
поделиться

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

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

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

0
ответ дан 15 December 2019 в 06:21
поделиться