0

@GrailsCompileStatic注释添加到方法或类允许使用动态GORM 查找器,例如findAllByIdAndProperty()。但是,添加注释不允许domainClass.withTransaction(),这也是 GORM AST 的添加。为什么?

(使用 grails-2.5.3)

更新(2016 年 5 月 10 日-上午 10:25) @jeff-scott-brown 是对的,它通常可以正常工作,所以这里是@GrailsCompileStatic失败的代码:

...
RestfulApiService service = ServiceUtils.getService(resourceName)
service.resourceClass.withTransaction { /* do something */ }

resourceClass是 Class 类型)

错误:

Compilation error: startup failed:
C:\...\myfile.groovy: 100: [Static type checking] - Cannot find matching method java.lang.Class#withTransaction(groovy.lang.Closure). Please check if the declared type is right and if the method exists.
@ line 100, column 13.
           service.resourceClass.withTransaction {
           ^

为什么添加注释后,在这种情况下withTransaction()会失败?

4

1 回答 1

0

为什么@GrailsCompileStatic 允许调用动态 GORM 查找器而不是 domainClass.withTransaction()?

确实如此。https://github.com/jeffbrown/withtx/blob/master/grails-app/controllers/demo/DemoController.groovy上的代码编译。

import grails.compiler.GrailsCompileStatic

@GrailsCompileStatic
class DemoController {

    def index() {
        Person.withTransaction {
            // ...
        }
        render 'Success!'
    }
}
于 2016-05-09T23:09:05.050 回答