Grails createCriteria: поиск объектов через поле, являющееся экземпляром нулевого класса домена - PullRequest
11 голосов
/ 04 апреля 2011

Я вижу неожиданное поведение в createCriteria Grails. У меня есть класс домена, который выглядит следующим образом:

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

Я хочу найти все экземпляры MyDomainClass, где anotherDomainClass имеет значение null. Итак, я делаю это:

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

Однако я ничего не получаю.

Что я делаю не так? Я вижу, что есть записи базы данных, где столбец ANOTHERDOMAINCLASS_ID действительно нулевой (или пустой, я не могу сказать).

Хорошо бы создать запрос, который напрямую ссылается на столбец ANOTHERDOMAINCLASS_ID, но я пока не нашел способа.

Спасибо!

Ответы [ 3 ]

15 голосов
/ 04 апреля 2011

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

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

Вот хороший справочник HibernateCriteriaBuilder Javadoc тоже.

2 голосов
/ 04 апреля 2011

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

РЕДАКТИРОВАТЬ: на самом деле может быть isEmpty вместо isNull.

1 голос
/ 04 апреля 2011

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

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