假设一个名为 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}%') }
}
}
有什么想法吗?
答案 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;