0

我需要根据各种标准进行搜索。

  1. 如果名称包含指定的字符串。
  2. 如果名称包含指定的字符串和列表中的字符串。
  3. 如果名称包含列表中的字符串之一。

我有以下代码,但它不起作用。这段代码有多糟糕?

def taskList = Object.createCriteria().list(params) {
if (params.query) {
    ilike("name", "%${params.query}%")
}
if (params.nameList) {
    params.nameList.split("&").each {
            or {
              ilike("name", "%${it}$%")
            }
    }
    }

用例 2 和 3 的结果为空。我做错了什么?我该怎么做?

干杯

4

2 回答 2

0
def taskList = Object.createCriteria().list(params) {
    def names = []
    if(params.nameList){
       names = nameList.split("&")
    }
    or{
        if (params.query){ilike("name", "%${params.query}%")}
        and{
            if (params.query){ilike("name", "%${params.query}%")}
            if(names){'in'('name', names)}
        }
        if (names) {
            names.each {name->
                or {
                  ilike("name", "%$name$%")
                }
            }
        }
    }
}

未经测试,但你可以试试上面的。我宁愿使用 HQL 来实现您所需要的。

于 2013-10-23T20:33:09.987 回答
0

我会使用in运算符 3. case

list{
  or{
    if( params.query ) ilike "name", "%${params.query}%"
    if( params.nameList ) 'in' 'name', params.nameList.split("&")
  }
}
于 2013-10-23T12:20:14.057 回答