繁体   English   中英

Grails-使用CreateCriteria执行WHERE IN子查询

[英]Grails - Perform WHERE IN subquery using CreateCriteria

我有一个如下的域类:

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"])

希望能帮助到你。

这对我有效(使用grails 2.4.2):

    def q = Blog.createCriteria ()
    def r = q.list {
        createAlias('tags', 't')
        or {
            like ("name", "Foo%")
            like ("t.elements", "%b%")
        }
    }

来自: https : //stackoverflow.com/a/24211973/1262371

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM