给出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
答案 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 }