Можно ли метапрограммировать именованные запросы на класс домена Grails? - PullRequest
0 голосов
/ 21 мая 2011

Можно ли метапрограммировать именованные запросы на класс домена grails? Если да, то как?

Спасибо

1 Ответ

2 голосов
/ 23 мая 2011

Доменные классы имеют свойство 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 с более подходящим тестом.

...