GORM其中查询组成的返回值

时间:2016-04-29 11:18:11

标签: grails gorm

我注意到一些我不太了解的行为。只要前面的查询没有从函数中返回,就可以将查询链接到哪里。

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

1 个答案:

答案 0 :(得分:0)

Grails包含全局AST转换......

  

将方法转换为分离条件查询。

它主要查找where()的用法并更改代码,以便它使用分离的标准。最有可能的是,在返回一个方法,特别是一个返回where()的方法时,调用Object并不会被AST确认,因此查询基本上不会更改并且正在执行什么都没有。

这不是Groovy所做的,而是Grails特有的。我并没有声称完整,也没有任何接近完整,理解发生了什么,但你可以通过查看DetachedCriteriaTransformer源代码来获得它的要点。