Grails createCriteria:通过一个空域类实例的字段查找对象

时间:2011-04-03 22:09:32

标签: grails gorm

我在Grails的createCriteria中看到了一些意想不到的行为。我有一个类似于这样的域类:

MyDomainClass {
    AnotherDomainClass anotherDomainClass
    static constraints = {
        anotherDomainClass(nullable:true)
    }
}

我想找到MyDomainClass的所有实例,其中anotherDomainClass为null。所以我这样做:

return MyDomainClass.createCriteria().list {
    eq('anotherDomainClass', null)
}

然而,我什么也没收到。

我做错了什么?我可以看到有一些数据库条目,其中ANOTHERDOMAINCLASS_ID列确实为空(或空白,我无法分辨)。

我可以直接创建一个引用ANOTHERDOMAINCLASS_ID列的查询,但我还没找到方法。

谢谢!

3 个答案:

答案 0 :(得分:15)

您可以使用isNull

代替使用eq
def results = MyDomainClass.withCriteria {
    isNull('anotherDomainClass')
}

这也是一个很好的参考HibernateCriteriaBuilder Javadoc

答案 1 :(得分:2)

如果您尝试isNull而不是eq会怎样?

编辑:实际上可能是isEmpty而不是isNull

答案 2 :(得分:1)

这不是一个真正的答案,但我暂时的解决方法是从数据库中检索所有对象并在应用层中进行过滤,如下所示:

MyDomainClass.list({it.anotherDomainClass == null})