将 @GrailsCompileStatic 注释添加到方法或类允许使用动态GORM查找器,例如: findAllByIdAndProperty()的。 但是,添加注释不允许 domainClass.withTransaction(),这也是GORM AST的添加。为什么呢?
(使用grails-2.5.3)
更新(2016年10月5日 - 上午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()会失败?
答案 0 :(得分: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!'
}
}