【问题标题】:how to dynamically modify a groovy hibernate query如何动态修改 groovy 休眠查询
【发布时间】:2014-03-05 16:09:46
【问题描述】:

我正在尝试将一些用户定义的过滤器添加到查询中。过滤器是 html 列表元素中的属性,我想做的是,如果未选择“全部”,则将条件添加到查询中。到目前为止我尝试过的是

Criteria crit = Person.createCriteria().
addAccountCondition(crit)
addPrimarySkillCondition(crit)
addSkillsetCondition(crit)
addDateCondition(crit)
crit.addOrder(Order.asc("account.name"))

crit.list()

private void addAccountCondition(Criteria query){
String acct = params?.accts?.value?.toString()

if (!acct.equals("all") && acct != null){
    query.add(Restrictions.eq("account.name", acct))
// old version
    //          query = query.where {
//              account {
//                  eq "name", acct
//                  order "name", "asc"
//              }
//          }
    println "acct is ${acct}"
    println "Applying account condition. The query is ${query.toString()}"
}
}

但是,通过这段代码,我试图将一个 groovy Criteria 转换为 Hibernate 标准。我知道如何使用所有这些进行常规查询,但不知道如何动态地进行查询

【问题讨论】:

标签: hibernate grails groovy


【解决方案1】:

从您的代码示例中很难判断发生了什么,但这样的事情可能会有所帮助...

def results = Person.withCriteria {
    def acct = params.accts?.value
    if(acct) {
        account {
            eq 'name', acct
        }
    }
}

如果您真的想将闭包传递给 addPrimarySkillCondition、addDateCondition 等几个方法,您可以通过对闭包进行一些特殊的委托处理来实现。为了向您展示具体细节,我需要了解这些方法中的内容。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 2011-07-20
    • 2012-12-30
    • 2011-08-09
    相关资源
    最近更新 更多