1

我的域类中有一个Integer rankOnHighlights属性。Project我想查询rankOnHighlights属性在 1 到 45 之间的所有项目。

为此,我发出以下条件查询:

Project.withCriteria {
        'in' "rankOnHighlights",[1..45]
        maxResults 45
        order "rankOnHighlights", "desc"
    }

但是,我收到以下错误消息:

groovy.lang.IntRange cannot be cast to java.lang.Integer

我尝试了各种不同的写作,但无济于事。任何建议都是最受欢迎的。

先感谢您。

4

1 回答 1

3

我不确定为什么这不起作用,但它应该是因为它类似于文档中的示例 - http://grails.org/doc/latest/ref/Domain%20Classes/createCriteria.html - 你应该创建http://jira.grails.org/browse/GRAILS上的一个问题

但是,这确实有效:

between "rankOnHighlights", 1, 45

编辑:我知道发生了什么,应该是

'in' "rankOnHighlights", (1..45)

但我仍然会使用between,因为会in生成错误的 SQL(如果范围足够宽,对于数据库查询解析器来说可能太大):

...
where
    this_.rank_on_highlights in (
        ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
    )
...
于 2012-04-06T19:26:03.353 回答