2011-05-21 53 views
0

是否有可能將命名查詢元編程到grails域類上?如果是這樣,怎麼樣?是否有可能將命名查詢元編程到grails域類上?

感謝

+0

你究竟是什麼意思?如果你有一個帶有'first'和'last'字段的域類,grails可以通過元編程爲你自動添加一個findByFirst,findByLast,findByFirstAndLast .... – hvgotcodes 2011-05-21 15:08:06

+0

[命名查詢](http://grails.org/doc/) latest/ref/Domain%20Classes/namedQueries.html) – Jason 2011-05-21 18:32:46

+0

具體而言,我想使用插件在域類上添加'status'字段。然而,'status'是一個用軟鍵鏈接到域類的獨立域(請參閱audit-logging)。我想添加一些命名查詢,並允許像findAllByStatus(fooStatus).otherNamedQuery()。list() – Jason 2011-05-21 18:38:51

回答

2

域類有namedQueries屬性,您可以用它來添加自己的命名查詢。如果你想在插件中使用元編程(而不是直接編輯域類),你應該在關閉插件的描述符文件時做到這一點。

像這樣的東西應該工作:

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的值用更合適的測試。

+1

這樣的動態方法添加到域類而不是命名查詢。 – Jason 2011-05-23 15:52:36

相關問題