grails findAll findAllWhere несоответствия

Учитывая домен Grails

class Person {
     String name
     int age
}

Я могу выполнить этот запрос

Person.findAll { age >= 25 }

Но когда я выполняю этот запрос, он не выполняет никакой фильтрации.

def query = { age >= 25 }
Person.findAll query

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

Также глядя на источник GormStaticApi в org/grails/datastore/gorm/, я также должен сделать следующее

Person.findAllWhere ([age: 25], [max: 10, offset:5])

но это работает, хотя

Person.findAllWhere ([age: 25]) works

Кто-нибудь знает, почему это так. Я использую Grails 2.3.9


person Pascal DeMilly    schedule 09.08.2014    source источник


Ответы (1)


В документации говорится:

Обратите внимание, что вы не можете передать замыкание, определенное как переменную, в метод where, если только оно не было явно приведено к экземпляру DetachedCriteria.

Это должно работать, если вы явно используете его:

def query = { age >= 25 } as DetachedCriteria
Person.findAll query

Хотя вы хотели создать многоразовый DetachedCriteria, было бы лучше сделать:

def query = Person.where { age >= 25}

Затем вы можете делать такие вещи, как:

query.list()
query.findAllBySomethingElse()
query.findAll { somethingelse == foo }
person Aaron    schedule 09.08.2014
comment
Я получаю доступ к своей БД через отдых и оцениваю другой способ фильтрации. В итоге я создал построитель для критериев, используя карту JSON в качестве параметров запроса, например {gt: ['age', 25]}, спасибо за указание к док. Я пропустил эту строчку. - person Pascal DeMilly; 11.08.2014