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

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

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

我想要所有访问过“印度”和“美国”两个国家的用户。

目前,我正在解决此问题,方法是获取两个visitorUsers列表,一个用于“印度”,另一个用于“美国”,然后将它们放在集合中。

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

最佳答案

我认为使用条件查询是不可能的,而使用动态查找程序绝对不可能。这是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很有意义,因为它可能包含多个元素),并且关系应该是多对多的。

08-28 23:15