Подтвердить что ты не робот

Grails createCriteria: поиск объектов через поле, которое является экземпляром класса null domain

Я вижу неожиданное поведение в 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, но я еще не нашел пути.

Спасибо!

4b9b3361

Ответ 1

Вместо использования eq вы можете использовать isNull

def results = MyDomainClass.withCriteria {
    isNull('anotherDomainClass')
}

Здесь хорошая ссылка HibernateCriteriaBuilder Javadoc.

Ответ 2

Что произойдет, если вы попробуете isNull вместо eq?

EDIT: может быть isEmpty вместо isNull.

Ответ 3

Это не реальный ответ, но пока я обходлюсь, чтобы получить все объекты из базы данных и фильтровать в уровне приложения, например:

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