2013-12-12 2 views
4

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

Пример

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

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

EDIT: На первый взгляд этот вопрос просто кажется, что я даже не пытаюсь и не смотрю на документацию. Уверяю вас, что я занимаюсь исследованиями и разными способами.

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

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

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

+0

Не вижу никаких причин, почему бы downvote этот вопрос, это понятно и может быть полезно. – lukelazarovic

+1

@anataliocs - немного расслабиться. Если бы вы отправили информацию в свой вопрос, который есть после редактирования, чтобы начать, вы получили бы лучший ответ. Более качественные вопросы получат более качественные ответы и, как правило, сводятся к более подробным сведениям. – Gregg

+0

Прошу прощения, это просто проблема, кажется, сначала такая простая, но разочаровывающая. Я попытался добавить дополнительные данные, чтобы лучше сформулировать мой вопрос. – anataliocs

ответ

3

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

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

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

Book.findAll("from book b where b.isArchived IS NULL or b.isArchived = 0") 
+1

Не могли бы вы использовать правду Groovy и написать 'Book.where {! IsArchived}'? – doelleri

+0

@doelleri - хорошее предложение, возможно. – Gregg

+1

Чтобы лучше рассказать о моем вопросе, что такое лучшая практика? Поскольку это похоже на простой запрос, я хотел использовать динамический искатель, но я открыт для чего угодно. – anataliocs

Смежные вопросы