在 grails 中创建条件时 isNull 未拾取空记录

When creating criteria in grails isNull is not picking up null records

我正在使用 createCriteria 来构建搜索结果列表。 inList 工作正常,但我无法让可选的 isNull 工作。在数据库中,我可以看到列中有包含空值的记录,但它们没有被选中。 AdoptionAgreement 域是一个枚举。 isEmpty 不起作用我得到一个 grails 异常。

   def adoptionAgreementCriteria = {
        if (params.adoptionAgreement) {
            inList('adoptionAgreement', params.list('adoptionAgreement').collect { AdoptionAgreement.valueOf(it)} )
            or {
                isNull('adoptionAgreement')
            }
        }
    }

这段代码有什么地方不对?

闭包中只有一件事传递给 or,这看起来不对。

当您使用 or 时,您需要将所有术语包含在大括号内:

or {
    option1
    option2
}

这意味着:选项 1 或选项 2。

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')的行。