【发布时间】:2019-12-31 00:04:20
【问题描述】:
我必须编写一些查询来实现在复杂数据模型中的搜索。我想使用 Gorm 的 Criteria DSL 来解决这个问题。 对于像Gorm 或Grails Documentation 中的示例这样的简单查询没问题,但我不知道如何实现更复杂的查询,例如 “每个在”、“没有在”或“只有一个 x 在”。我希望有人能给我一个提示。
Grails 域类:
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()
}
上面查询的返回有预期的结果:All Content,在argsTitletype中有一个Titletype
但是如何查询“Content, which has all the Titletypes in 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)
}
}
}
我的错误在哪里?我必须使用子查询吗?
【问题讨论】:
标签: grails groovy grails-orm criteria