2.0.0.RC1查询位置 - 没有此类属性异常

时间:2011-11-19 10:21:43

标签: grails

每次我尝试将变量传递给where查询时,我都会收到groovy.lang.MissingPropertyException。

这些是我的域类:

class Book {
    String title

    static belongsTo = [author: Author]

    static constraints = {
        title(blank: false, maxSize: 100)
    }
}

class Author {
    String name

    static hasMany = [books: Book]

    static constraints = {
        name(unique: true, blank: false, maxSize: 50)
    }
}

这是引发异常的测试方法:

@Test
    void testWhereQuery() {
        long authorId = 5
        def query = Book.where {
            author.id == authorId
        }

        def books = query.list() 
        assert books.size() == 0
    }

groovy.lang.MissingPropertyException: No such property: authorId for class: grails.gorm.DetachedCriteria
    at grails.gorm.DetachedCriteria.methodMissing(DetachedCriteria.groovy:808)
    at grails.gorm.DetachedCriteria.build(DetachedCriteria.groovy:723)
    at org.grails.datastore.gorm.GormStaticApi.where(GormStaticApi.groovy:116)
    at helloworld.BooksIntegrationTests.testWhereQuery(BooksIntegrationTests.groovy:38)

如何将变量传递给查询?

2 个答案:

答案 0 :(得分:2)

我也一直在与此作斗争。

尝试将您的where查询更改为:

def query = Book.where {
    author.id.toString() == "${authorId}"
}

这种令人讨厌的技术只适用于字符串,是我能够在变量查询中使用变量替换的唯一方法。

缺乏对参数化的合理支持,其中查询使它们接下来无用,IMO。很遗憾,因为符号的格式非常简洁。

答案 1 :(得分:1)

我自己问了这个问题,然后发现查询似乎没有提供任何变量支持。只有命名查询似乎能够做到这一点。

Parameters with new where queries in Grails 2.0