Grails gorm’where’用’lower()’和’in’运算符查询

我有一个Domain类

class Hashtag {
    String tag
}

为什么

Hashtag.where { lower(tag) == "#london" }.list()

工作正常,但是

Hashtag.where { lower(tag) in [ "#london", "#paris" ] }.list()

结果是

org.springframework.dao.InvalidDataAccessResourceUsageException:在类型为[class java.lang.String]的属性[hashtag]的查询中定义的不支持的函数[lower]

如何正确编写这样的查询?

谢谢!

最佳答案 我无法回答为什么在()中使用lower()不起作用.我读了
source,但我不太了解AST,不能理解它.

但是,要解决您的问题,您可以使用derived property来执行lower().

class Hashtag {
    String tag
    String loweredTag

    static mapping {
        loweredTag formula: 'lower(tag)'
    }
}

然后你可以在where查询中使用derived属性:

Hashtag.where { loweredTag in [ "#london", "#paris" ] }.list()
点赞