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



我有一个像这样的域类:

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子查询来实现这一点,并基于父查询进行过滤。然而,我一直无法找到一种方法来做到这一点,在Grails中使用CreateCriteria构建器。

如果可能的话,有人能给我提供一些见解吗?

如果可能的话,我宁愿不必在HSQL中实现这一点,但会对如何实现这一目标的建议持开放态度…

我考虑过这样的事情:

from Blog as b
where b.name like '%:query%' or b.id in ( select ... from tags where .... )

但是我不确定要为标签表名称指定什么,因为它不是一个域类,只是一个字符串列表。

谢谢!

我相信你正在搜索的是"elements"关键字(在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

相关内容

  • 没有找到相关文章

最新更新