【问题标题】:Grails include closure in createCriteriaGrails 在 createCriteria 中包含闭包
【发布时间】:2016-06-22 05:54:03
【问题描述】:

我有一个 grails 应用程序,现在我需要在其中进行搜索。我创建了一个包含常见条件的闭包。

def criteria = {
        if(pageSize){
            delegate.maxResults( pageSize )
        }
        if(offset){
            delegate.firstResult( offset )
        }
    ........
}

然后我想在某些特定条件下单独在创建标准中使用它

objects = DomainObkect.createCriteria().list {

                    ne "booleanCheck", true
                    eq "value", value
                    criteria
                } 

有没有办法让它生效?现在标准选项没有被执行

提前致谢

【问题讨论】:

    标签: grails grails-orm criteria


    【解决方案1】:

    当然。 比如:

    Closure searchRestriction = { builder ->
                if(pageSize){
                    builder.maxResults( pageSize )
                }
                if(offset){
                    builder.firstResult( offset )
                }
            }
            def criteria = DomainObkect.createCriteria()
            objects = criteria.list {
                ne "booleanCheck", true
                eq "value", value
                searchRestriction(criteria)
            }
    

    【讨论】:

    • 有没有一种方法可以让我使用委托并且仍然能够做到这一点?因为在 searchRestriction 里面我还需要访问域对象的 namedQueries
    • 最好使用 DetachedCriteria 来简化搜索闭包的管理? DetachedCriteria 比常规标准更灵活。 docs.grails.org/latest/guide/GORM.html#detachedCriteria
    【解决方案2】:

    【讨论】:

    • 我通过在列表方法中添加以下几行来尝试上述方法,“criteria.delegate = delegate”和“criteria()”但是这样做,我无法调用某些方法,例如闭包内的“delegate.inCountMethod”
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2012-02-15
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多