【问题标题】:grails findAll findAllWhere inconsistenciesgrails findAll findAllWhere 不一致
【发布时间】:2014-08-09 00:36:30
【问题描述】:

给定一个 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

【问题讨论】:

    标签: grails groovy grails-orm grails-2.3


    【解决方案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 }
    

    【讨论】:

    • 我正在通过休息访问我的数据库,并正在评估不同的过滤方式我最终创建了一个构建器,使用 JSON 映射作为查询参数,例如 { gt: [ 'age ', 25 ] } thx 指向文档。我错过了那条线。
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多