每次我尝试将变量传递给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)
如何将变量传递给查询?
答案 0 :(得分:2)
我也一直在与此作斗争。
尝试将您的where查询更改为:
def query = Book.where {
author.id.toString() == "${authorId}"
}
这种令人讨厌的技术只适用于字符串,是我能够在变量查询中使用变量替换的唯一方法。
缺乏对参数化的合理支持,其中查询使它们接下来无用,IMO。很遗憾,因为符号的格式非常简洁。
答案 1 :(得分:1)
我自己问了这个问题,然后发现查询似乎没有提供任何变量支持。只有命名查询似乎能够做到这一点。