Ответ 1
Вместо использования eq вы можете использовать isNull
def results = MyDomainClass.withCriteria {
isNull('anotherDomainClass')
}
Здесь хорошая ссылка HibernateCriteriaBuilder Javadoc.
Я вижу неожиданное поведение в createCriteria Grails. У меня есть класс домена, который выглядит так:
MyDomainClass {
AnotherDomainClass anotherDomainClass
static constraints = {
anotherDomainClass(nullable:true)
}
}
Я хочу найти все экземпляры MyDomainClass, где anotherDomainClass имеет значение null. Поэтому я делаю это:
return MyDomainClass.createCriteria().list {
eq('anotherDomainClass', null)
}
Однако я ничего не получил.
Что я делаю неправильно? Я вижу, что есть записи в базе данных, где столбец ANOTHERDOMAINCLASS_ID действительно имеет значение null (или пустое, я не могу сказать).
Мне было бы хорошо создать запрос, который напрямую ссылается на столбец ANOTHERDOMAINCLASS_ID, но я еще не нашел пути.
Спасибо!
Вместо использования eq вы можете использовать isNull
def results = MyDomainClass.withCriteria {
isNull('anotherDomainClass')
}
Здесь хорошая ссылка HibernateCriteriaBuilder Javadoc.
Что произойдет, если вы попробуете isNull
вместо eq
?
EDIT: может быть isEmpty
вместо isNull
.
Это не реальный ответ, но пока я обходлюсь, чтобы получить все объекты из базы данных и фильтровать в уровне приложения, например:
MyDomainClass.list({it.anotherDomainClass == null})