我在Grails的createCriteria中看到了一些意想不到的行为。我有一个类似于这样的域类:
MyDomainClass {
AnotherDomainClass anotherDomainClass
static constraints = {
anotherDomainClass(nullable:true)
}
}
我想找到MyDomainClass的所有实例,其中anotherDomainClass为null。所以我这样做:
return MyDomainClass.createCriteria().list {
eq('anotherDomainClass', null)
}
然而,我什么也没收到。
我做错了什么?我可以看到有一些数据库条目,其中ANOTHERDOMAINCLASS_ID列确实为空(或空白,我无法分辨)。
我可以直接创建一个引用ANOTHERDOMAINCLASS_ID列的查询,但我还没找到方法。
谢谢!
答案 0 :(得分:15)
您可以使用isNull
代替使用eqdef results = MyDomainClass.withCriteria {
isNull('anotherDomainClass')
}
这也是一个很好的参考HibernateCriteriaBuilder Javadoc。
答案 1 :(得分:2)
如果您尝试isNull
而不是eq
会怎样?
编辑:实际上可能是isEmpty
而不是isNull
。
答案 2 :(得分:1)
这不是一个真正的答案,但我暂时的解决方法是从数据库中检索所有对象并在应用层中进行过滤,如下所示:
MyDomainClass.list({it.anotherDomainClass == null})