我有一个如下的域类:
class Blog {
String name
Set tags = []
static constraints = {}
static hasMany = [tags: String]
}
我有一个搜索例程,希望在其中可以根据名称和标签集合进行过滤。
def results = Blog.createCriteria().list(params) {
def query = params.query?.trim()
if(query) {
or {
like("name", "%${query}%")
like("tags", "%${query}%") <--- This does not work...
}
}
}
在SQL中,我将通过针对标记表的WHERE IN子查询来实现此功能,并根据父表进行过滤。但是,我无法使用CreateCriteria构建器在Grails中找到做到这一点的方法。
如果有可能,有人可以向我提供见解吗?
如果可能的话,我宁愿不必在HSQL中实施此操作,但可以就如何实现此方法提出建议...
我考虑了以下几方面的内容:
from Blog as b
where b.name like '%:query%' or b.id in ( select ... from tags where .... )
但是我不确定为标记表名称指定什么,因为它不是域类,而只是一个字符串列表。
谢谢!
最佳答案
我相信您要搜索的是“元素”关键字(在HQL中)
该查询将是:
def results = Blog.executeQuery('from Blogas b where :name in elements(tags) or b.name like :name', [name: "myGreatTagOrName"])
希望能帮助到你。
关于hibernate - Grails-使用CreateCriteria执行WHERE IN子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066996/