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