0

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

谢谢

4

1 回答 1

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更合适的测试。

于 2011-05-23T08:43:15.257 回答