Подтвердить что ты не робот

Как искать элементы, чья коллекция содержит другой элемент в Grails?

Скажем, у меня есть класс домена под названием "Пользователь", который может следовать за другими объектами "Пользователь". Он делает это, имея поле, указанное как:

def hasMany=[followedUsers:User]

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

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

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

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

4b9b3361

Ответ 1

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

User.executeQuery(
   'select u from User u where :follower in elements(u.followedUsers)',
   [follower: userInstance])

Ответ 2

По-моему, этот синтаксис намного чище:

User.withCriteria { followedUsers{ eq('id', userInstance.id) } }