是否可以将命名查询的元程序编程到grails域类中?

时间:2011-05-21 14:55:33

标签: grails metaprogramming named-query

是否可以将命名查询的元程序编程到grails域类?如果是这样,怎么样?

由于

1 个答案:

答案 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的值替换为更多适当的测试。