我必须编写一些查询才能在复杂的数据模型中实现搜索。我想使用Gorm的标准DSL来解决这个问题。 对于像 Gorm 或 Grails 文档中的示例这样的简单查询,这没有问题,但我不知道,如何实现更复杂的查询,例如 "每个在"、"无在"或"只有一个 x 在"。我希望有人能给我一个提示。
圣杯域类:
class Content {
Integer contentNumber
static hasMany = [titles : Title]
}
class Title {
String title
Titletype titletype
}
class Titletype {
String name
}
带标准的方法:
def filter(GrailsParameterMap args) {
//To ensure that the ids of titletypes to query are always given as Long[]
Long[] argsTitletype = [args.title.titletype.value].flatten() as Long[]
def query = new DetachedCriteria(Content).build {}
// Every Content, which has a Title with Titletype in argsTitletype
query = query.build {
titles {
'in'('titletype.id', argsTitletype)
}
}
return query.list()
}
上述查询的返回具有预期的结果:所有内容,它在 argsTitletype 中具有 Titletype
但是如何查询"内容,其中具有argsTitletype中的所有标题类型"?例如,我尝试过:
query = query.build {
titles {
and {
argsTitletype.each { tt ->
eq('titletype.id', tt)
}
}
}
或
query = query.build {
and {
argsTitletype.each { tt ->
titles {
eq('titletype.id', tt)
}
}
}
我的失误在哪里?我必须使用子查询吗?
为了您的全包请尝试以下操作:
query = query.build {
titles {
titletype {
argsTitletype.each { tt ->
eq 'id', tt
}
}
}
}
您在这里不需要and
,因为它们是默认应用的。