如何在GORM中对字符串集合使用like运算符进行查询

时间:2011-12-01 20:20:10

标签: grails groovy gorm

假设一个名为 User 的域类。 用户类如下所示:

class User {
     List<String> values
}

集合包含“http://example.com/x”,“http://google.com/y”,“http://google.com/z等字符串“等等......

假设我们要构建一个查询,该查询会获取集合(例如“google.com”)中具有特定字符串的所有用户。像这样:

def criteria = User.createCriteria()
def results = criteria.listDistinct () {
  and {
    user.values.each {  like('someField', '%${it}%') }
  }
}

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我通过实验找到了答案。解决方案是:

def criteria = User.createCriteria()
def results = criteria.listDistinct () {
  and {
    user.values.each {  like('someField', '%'+it+'%') }
  }
}

答案 1 :(得分:0)

我不确定您对建议的答案做了什么。 我之前从未在条件查询中看到过每个用法。

这个问题之前已被多次询问,但从未给出答案。 问题是你是一个字符串关联,它不是一个域类。如果您要创建自己的String域类,例如ondrej.String {String strValue},那么您可以这样做:

User.withCriteria {

 values { ilike("strValue", "...") }

}

问题是无法访问String对象的值。 String类的值称为value,但它是一个char数组,所以我不相信以下内容会起作用:

User.withCriteria {

 values { ilike("value", "...") }

}

您可以尝试使用:

User.withCriteria {

 values { ilike("toString", "...") }

}

或其他东西而不是toString ...我现在没有可能测试它。

希望有所帮助

答案 2 :(得分:0)

经过大量的尝试和研究,我发现这适用于Grails 2.4.0,我不了解旧版本。

Cat.withCriteria {
    createAlias('nicknames', 'n') 
    ilike 'n.elements', '%kitty%'
}

诀窍是使用&#39; n。元素&#39;