我正在尝试向查询添加一些用户定义的过滤器。过滤器是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标准。我知道如何使用所有这些进行常规查询,但不知道如何动态地进行查询
答案 0 :(得分:0)
从您的代码示例中可以很难分辨出所有情况,但这样的事情可能有所帮助......
def results = Person.withCriteria {
def acct = params.accts?.value
if(acct) {
account {
eq 'name', acct
}
}
}
如果你真的想要将闭包传递给几个方法,比如addPrimarySkillCondition,addDateCondition等,你可以在闭包上使用一些特殊的委托处理。为了向您展示具体细节,我需要了解这些方法中的内容。
我希望有所帮助。