grails - 在createCriteria中使用配置驱动的逻辑

标签 grails groovy gorm

我有要求,其中我需要一些标准查询逻辑来进行配置驱动。之前我曾经查询过:
例如。:

User.createCriteria().list{
     or{ 
        eq('username',user.username)
        eq('name',user.name)
     }
}

但是,我需要在我的用例中对此进行配置,因此,我尝试使用此代码段。
def criteriaCondition= grailsApplication.config.criteriaCondition?:{user->
         or{
           eq('username',user.username)
           eq('name',user.name)   
         }
}

User.createCriteria().list{criteriaCondition(user)}

但是,这对我不起作用。我正在为“或”丢失方法异常,我从某些来源尝试了很少的解决方案,但对我没有用。

所以,谁能帮助我:

1)如何使以上给出的代码起作用。
2)我的用例还有其他更好的方法。

提前致谢!!!

最佳答案

您必须将criteriaBuilder对象传递给闭包,如下所示:

def criteriaCondition = grailsApplication.config.criteriaCondition ?: { cb, user ->
     cb.or{
       cb.eq('username',user.username)
       cb.eq('name',user.name)   
     }
}

def criteriaBuilder = User.createCriteria()

criteriaBuilder.list{
    criteriaCondition(criteriaBuilder, user)
}

显然,Config.groovy中的闭包也必须具有相同的参数列表,包括cb

关于grails - 在createCriteria中使用配置驱动的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18888632/

相关文章:

mongodb - 如何使用InsideCircle和另一个术语查询MongoDB?

grails - 添加Grails 3插件介绍Grails 2项目

groovy - @CompileStatic 给出 NullPointerException

java - 使用 SoapUI 通过 JavaCode 调用 Groovy-Script 中的属性

groovy - 无法在 groovy 中创建字节数组的数组

grails - 如何打破继承

grails - 如何在Grails创建的数据库中更新排序规则

grails - 在 Grails Controller 中重用 Criteria

grails - ActiveMQ 嵌入式代理 SSL

grails - Grails GORM会遍历所有hasMany元素,并且通常会遍历所有域类元素,而不会在列表中全部读取它们