在Grails中,我有两个具有多对多关系的域类
class VisitingUser
{
String name
static hasMany = [visitedCountries:VisitedCountry]
static belongsTo = VisitedCountry
}
class VisitedCountry
{
String countryName
static hasmany=[users:VisitingUser]
}
我希望所有访问过“india”和“usa”国家/地区的用户。
目前我通过获取两个来访者列表来解决这个问题,一个用于“印度”,另一个用于“美国”,然后将它们放入一个集合中。
我想要使用createCriteria或动态查找器的解决方案。
答案 0 :(得分:1)
我不认为使用条件查询是可行的,并且使用动态查找器绝对不可能。以下是HQL的解决方案:
VisitingUser.executeQuery('''
select distinct u from VisitingUser u where
u in (
select u from VisitingUser u join u.visitedCountries country where country.countryName = 'usa'
)
and u in (
select u from VisitingUser u join u.visitedCountries country where country.countryName = 'india'
)
''')
两个不相关的东西 - VisitedCountries
应该被称为VisitedCountry
(尽管集合名称visitedCountries
是有意义的,因为它可能有多个元素),并且关系应该是多对多的许多。