How do I search for elements whose collection cont

2019-03-18 08:17发布

问题:

Let's say I have a domain class called "User" which can follow other "User" objects. It does so having a field specified as:

def hasMany=[followedUsers:User]

I need to do the reverse (find all User objects that follow a specific User object) without setting up the reverse relationship, since it is not a use case performed often. I tried to do something like this, using closures:

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

but this always returns all users in the database, regardless of their follow status. I tried doing with HQL but failed miserably as well.

Could anyone give me a quick pointer on the simplest way to accomplish this? Thank you.

回答1:

You can use this HQL query:

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


回答2:

In my opinion, this syntax is much cleaner:

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