1

我正在阅读 grails criteria API,我在 grails API here中找到以下代码

     def c = Account.createCriteria()
     def results = c {
         projections {
             groupProperty("branch")
         }
         like("holderFirstName", "Fred%")
         and {
             between("balance", 500, 1000)
             eq("branch", "London")
         }
         maxResults(10)
         order("holderLastName", "desc")
     }

我的问题是调用 Account.createCriteria() 会给你 grails.orm.HibernateCriteriaBuilder 对象但是当说 "c { ....}" 时,我知道 colsure 被调用但我们拥有的对象是 HibernateCriteriaBuilder 对象而不是 Closure 对象,那么闭包是如何被调用的。

4

2 回答 2

1

如 API 中所述这将 Hibernate Criteria API 包装在构建器中。Groovy 中使用构建器来创建领域特定语言 (DSL),例如 GORM DSL。

于 2014-05-23T10:09:56.073 回答
0

可能是您打算做类似 c.list { ... } 而不是 c { ... } 之类的事情?这些是根本不同的。前者调用列表方法并将闭包作为参数传递。后者试图调用“call”方法并将闭包作为参数传递。

于 2014-05-24T11:42:24.553 回答