我注意到一些我不太了解的行为。只要没有从函数返回查询,就可以在哪里链接查询。
def w = Subscription.where { topicId == 1 }
w.where { user.id == 1 }.findAll()
//works as expected
def f() {
Subscription.where { topicId == 1 }
}
f().where { user.id == 1 }.findAll()
//doesn't filter by user.id
def f() {
Subscription.where { topicId == 1 }
}
f().build { eq 'user.id', 1L }
//works
我不介意使用DetachedCriteria#build()。我只想了解:-D
-编辑
Grails 2.4.2
最佳答案
Grails包含全局AST转换...
that transforms where methods into detached criteria queries.
本质上,它查找
where()
的使用并更改代码,以便使用分离的条件。最有可能的是,在方法(特别是返回where()
的方法)返回时,按原样调用Object
不会被AST确认,因此查询基本上最终保持不变并且什么也不做。Groovy并没有做任何事情,而是Grails特有的。我并没有完全理解正在发生的事情,但是您可以通过查看DetachedCriteriaTransformer源代码来了解要点。
关于grails - GORM返回值查询组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36936972/