戈尔姆"each in"/"none in"标准



我必须编写一些查询才能在复杂的数据模型中实现搜索。我想使用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,因为它们是默认应用的。

相关内容

  • 没有找到相关文章

最新更新