我使用createCriteria构建搜索结果列表。 inList工作正常但我无法使用可选的isNull工作。在数据库中,我可以看到列中有一个空值的记录,但它们没有被选中。 AdoptionAgreement域是一个枚举。 isEmpty不起作用我得到了grails例外。
def adoptionAgreementCriteria = {
if (params.adoptionAgreement) {
inList('adoptionAgreement', params.list('adoptionAgreement').collect { AdoptionAgreement.valueOf(it)} )
or {
isNull('adoptionAgreement')
}
}
}
这段代码看起来不正确?
答案 0 :(得分:1)
在闭包中只有一件事传递给or
,这看起来不正确。
当您使用or
时,您需要在花括号中包含所有术语:
or {
option1
option2
}
表示:option1或option2。
The first example in the documentation有or
:
def c = Account.createCriteria()
def results = c {
between("balance", 500, 1000)
eq("branch", "London")
or {
like("holderFirstName", "Fred%")
like("holderFirstName", "Barney%")
}
maxResults(10)
order("holderLastName", "desc")
}
这将检索余额在给定范围内的行,而分支是指定的行(持有者名称为'Fred'或持有者名称为'Barney')。