是否可以将命名查询元编程到 grails 域类上?如果是这样,怎么做?
谢谢
域类有一个namedQueries属性,您可以使用它来添加您自己的命名查询。如果您想在插件中使用元编程(而不是直接编辑域类)来执行此操作,您应该在插件描述符文件的doWithDynamicMethods闭包中执行此操作。
像这样的东西应该工作:
class MyPlugin {
def doWithDynamicMethods = { applicationContext ->
application.domainClasses.each { domainClass ->
boolean domainClassFilter = domainClass as Boolean
if (domainClassFilter) {
domainClass.metaClass.static.myNamedQuery = {->
// implementation of your named query goes here. Here is an example implementation
// that returns all instances with status == 'ready'
String simpleClassName = domainClass.simpleName
domainClass.findAll("from $simpleClassName where status = ?", ['ready'])
}
}
}
}
}
这将添加myNamedQuery
到安装插件的应用程序中的每个域类。如果您只想将其添加到某些域类,则将 的值替换为domainClassFilter
更合适的测试。