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

标签 hibernate grails hsqldb 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"])

希望能帮助到你。

关于hibernate - Grails-使用CreateCriteria执行WHERE IN子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066996/

相关文章:

java hibernate netbeans xml

java - Oracle 中使用序列生成 Hibernate ID - 单次数据库访问

java - 如何将 HSQL DB 与 Java 应用程序集成

grails - 将 Grails 域对象映射到 JDBC 表/序列

tomcat - 是否可以在不停止应用程序的情况下部署新的 .war 应用程序?

java - 如何定义拍摄快照的依赖关系?

testing - 每次测试运行后重置数据库

java - 如何禁用 JPA 实体类的 sql 创建

java - 调用 contains 时无法重写 Java 上的 Equals 方法

grails - Grails:在域类中重写getter方法