grails - GORM返回值查询组成

标签 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

最佳答案

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/

相关文章:

grails - 在Grails中,如何合并 View 和模板的head标签?

unit-testing - Grails - 如何单元测试 addTo*

grails - 如何向Grails应用程序添加strict-transport-security header

date - Grails Date变量将不会设置时间

hibernate - 不要更新或删除数据库中的数据

grails - 当我无法通过验证时(发生异常后不刷新 session )错误消息,为什么?

hibernate - AWS Beanstalk和Grails 2.3.7 war

hibernate - 当使用GORM传递给服务时,如何防止Hibernate持久化对象

grails - 如何在 grails 中使用 XML 用户文件实现身份验证?

grails - Grails 2.0文档-如何打印出来?