Как написать динамический искатель Grails, который ищет 0 или null

Как лучше всего написать динамический поисковик Grails, который ищет флаг, равный 0 или нулевой?

Пример

class Book {
    String title
    Date releaseDate
    String author
    Boolean paperback
    Integer isArchived
}

isArchived может принимать значение NULL. Таким образом, запрос либо ищет isArchived = 0, либо, если он равен нулю, он также хочет, чтобы он был в результатах.

РЕДАКТИРОВАТЬ: На первый взгляд этот вопрос кажется таким, что я даже не пытаюсь и не просматриваю документацию. Уверяю вас, что я исследовал и пробовал много разных вещей.

Кроме того, да, логический флаг в базе данных не должен обнуляться, но в данный момент невозможно изменить таблицу. Разработчик в этом случае полагался на установку значения флага на 0 по умолчанию в объекте домена. Хотя это работало в большинстве случаев, существуют определенные сценарии, в которых флаг устанавливается равным нулю.

Я пробовал много разных способов сделать это с помощью динамических искателей, но кажется, что один и тот же столбец дважды в динамическом искателе невозможен.

Я бы принял ответ: «Нет, это невозможно, используя динамические средства поиска, просто используйте метод createCriteria()». Я просто хочу знать наверняка, если это невозможно.


person anataliocs    schedule 12.12.2013    source источник
comment
Не вижу причин, по которым можно было бы понизить этот вопрос, он ясен и может быть полезен.   -  person lukelazarovic    schedule 13.12.2013
comment
@anataliocs, расслабься немного. Если бы вы с самого начала поместили в свой вопрос информацию, которая есть после редактирования, вы бы получили более качественную обратную связь. Лучшие вопросы дают лучшие ответы, и это обычно сводится к большему количеству деталей.   -  person Gregg    schedule 13.12.2013
comment
Прошу прощения, просто проблема сначала кажется такой простой, но это расстраивает. Я попытался добавить дополнительные детали, чтобы лучше сформулировать свой вопрос.   -  person anataliocs    schedule 13.12.2013


Ответы (1)


Вы можете использовать функцию where, если используемая вами версия Grails поддерживает ее:

def results = Book.where {
    (isArchived == null || isArchived == 0)
}

Вы также можете использовать HQL:

Book.findAll("from book b where b.isArchived IS NULL or b.isArchived = 0")
person Gregg    schedule 12.12.2013
comment
Не могли бы вы использовать Groovy правда и написать Book.where { !isArchived }? - person doelleri; 13.12.2013
comment
Чтобы лучше сформулировать мой вопрос, какова наилучшая практика? Поскольку это кажется простым запросом, я хотел использовать динамический поиск, но я открыт для чего угодно. - person anataliocs; 13.12.2013