是否可以将命名查询的元程序编程到grails域类?如果是这样,怎么样?
由于
答案 0 :(得分:2)
域类具有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
的值替换为更多适当的测试。