在一个字段grails域上应用AND条件

时间:2014-02-08 19:15:52

标签: grails gorm grails-domain-class

在Grails中,我有两个具有多对多关系的域类

class VisitingUser
{
  String name
  static hasMany = [visitedCountries:VisitedCountry]
  static belongsTo = VisitedCountry
}

class VisitedCountry
{
  String countryName
  static hasmany=[users:VisitingUser]
}

我希望所有访问过“india”和“usa”国家/地区的用户。

目前我通过获取两个来访者列表来解决这个问题,一个用于“印度”,另一个用于“美国”,然后将它们放入一个集合中。

我想要使用createCriteria或动态查找器的解决方案。

1 个答案:

答案 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是有意义的,因为它可能有多个元素),并且关系应该是多对多的许多。