Как мне искать элементы, коллекция которых содержит другой элемент в Grails? - PullRequest
12 голосов
/ 20 января 2012

Допустим, у меня есть класс домена под названием «Пользователь», который может следовать за другими объектами «Пользователь». Это делает поле, указанное как:

def hasMany=[followedUsers:User]

Мне нужно сделать обратное (найти все объекты пользователя, которые следуют за определенным объектом пользователя) без настройки обратной связи, поскольку это не тот случай использования, который выполняется часто. Я пытался сделать что-то вроде этого, используя замыкания:

User.findAll { it.followedUsers.contains(userInstance) }

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

Может ли кто-нибудь дать мне быстрый указатель на самый простой способ сделать это? Спасибо.

Ответы [ 2 ]

13 голосов
/ 20 января 2012

Вы можете использовать этот HQL-запрос:

User.executeQuery(
   'select u from User u where :follower in elements(u.followedUsers)',
   [follower: userInstance])
1 голос
/ 18 ноября 2016

На мой взгляд, этот синтаксис намного чище:

User.withCriteria { followedUsers{ eq('id', userInstance.id) } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...