如何动态修改groovy hibernate查询

时间:2014-03-05 16:09:47

标签: hibernate grails groovy

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

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标准。我知道如何使用所有这些进行常规查询,但不知道如何动态地进行查询

1 个答案:

答案 0 :(得分:0)

从您的代码示例中可以很难分辨出所有情况,但这样的事情可能有所帮助......

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

如果你真的想要将闭包传递给几个方法,比如addPrimarySkillCondition,addDateCondition等,你可以在闭包上使用一些特殊的委托处理。为了向您展示具体细节,我需要了解这些方法中的内容。

我希望有所帮助。