我无法确定GORM查询以匹配对象上的多个关联:
class Zoo {
String name
static hasMany = [animals:Animal]
static namedQueries = {
// SEARCH1 match any of a list of animals
searchOr { searchAnimals ->
or {
searchAnimals.each { name ->
animals {
eq('name', name)
}
}
}
}
// SEARCH2 match ALL of a list of animals
searchAnd { searchAnimals ->
and {
searchAnimals.each { name ->
animals {
eq('name', name)
}
}
}
}
}
}
class Animal {
String name
}
SEARCH1很乐意将动物园与动物列表中的任何一个匹配,但是如何编写SEARCH2以获得所提供列表中包含所有动物的动物园?
答案 0 :(得分:1)
我不知道GORM,我不知道一个完整的解决方案,但我认为当前SEARCH2查询的问题是什么以及可能有什么帮助。当前的searchOr是这样的:
WHERE ANIMAL.NAME = 'bear'
OR ANIMAL.NAME = 'bird'
OR ANIMAL.NAME = 'puma'
这样会很好用。 searchAnd是这样的:
WHERE ANIMAL.NAME = 'bear'
AND ANIMAL.NAME = 'bird'
AND ANIMAL.NAME = 'puma'
这不能给出正确的结果,因为任何一只动物都不能同时成为熊,鸟和美洲狮。
您正在寻找的是这样的:
WHERE EXISTS (SELECT FROM ANIMAL A WHERE A.ZOO = Z.ID AND A.NAME = 'bear')
AND EXISTS (SELECT FROM ANIMAL A WHERE A.ZOO = Z.ID AND A.NAME = 'bird')
AND EXISTS (SELECT FROM ANIMAL A WHERE A.ZOO = Z.ID AND A.NAME = 'puma')
但是我不太了解GORM能够以这种方式制定查询。根据我的阅读,detached criteria中有exists
种方法。但也许这是不可能的,除非使用Hibernate Query Language。