grails findAll findAllWhere不一致

时间:2014-08-09 00:36:31

标签: grails groovy gorm grails-2.3

给出Grails域

class Person {
     String name
     int age
}

我可以执行该查询

Person.findAll { age >= 25 }

但是当我执行此查询时,它不会进行任何过滤

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

我尝试克隆,或者在将其作为参数传递之前将该闭包的所有者和委托置零,但仍然没有运气

另外,在org / grails / datastore / gorm /中查看GormStaticApi的来源也应该可以执行以下操作

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

但它确实有效

Person.findAllWhere ([age: 25]) works

任何人都知道为什么会这样。我正在使用Grails 2.3.9

1 个答案:

答案 0 :(得分:3)

文档说:

  

请注意,您无法将定义为变量的闭包传递给   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 }