¿Es posible personalizar los métodos CRUD autogenerados de hibernación-plugin en mi aplicación Grails?
-
27-09-2019 - |
Pregunta
La copia de mi proyecto contiene el siguiente fragmento en HibernateGrailsplugin.Groovy:
def doWithDynamicMethods = {
def dynamicMethods = HibernatePluginSupport.doWithDynamicMethods
dynamicMethods.delegate = delegate
dynamicMethods.call(it)
// aids in generating appropriate documentation in plugin.xml since
// domain class methods are lazily loaded we initialize them here
if(plugin.basePlugin) {
try {
def clz = application.classLoader.loadClass("org.grails.Behavior")
clz.count()
}
catch(e) {
// ignore
}
}
}
Soy nuevo en Grials/Groovy, pero si entiendo correctamente, este cierre está delegando la adición/eliminación de métodos dinámicos a la clase DowithdynamicMethods de la clase HibernatePlugInsupport. Parece que la clase HibernatePlugInsupport se compila con el resto del código específico de los gros, si el código para HibernatedPlugInsupport vivía en la copia del complemento de mi proyecto, podría personalizarlo fácilmente a mis necesidades. Mi pregunta es, ¿cómo modifico los métodos autogenerados para clases específicas? La única forma en que veo es reescribir el cierre DowithdynamicMethods en el archivo maravilloso, pero no quiero hacer eso ya que solo lo estoy personalizando para algunas clases de dominio. Más específicamente, ¿cómo elimino/reemplazo los métodos dinámicos agregados por el cierre 'HibernatePlugInsupport.dowithdynamicmethods?
Solución
En primer lugar: los buscadores dinámicos se basan en Groovy's Características de metaprogramación.
No debe modificar el hibernateGrailsplugin.groovy. Este archivo es parte del complemento Grails Hibernate y se anulará al ejecutar ciertos comandos de Grails.
Dado que es libre de modificar sus meta-clases de objetos geniales en cualquier momento desde su aplicación, podría
a) Cree su propio complemento Grails que se cuele en los buscadores dinámicos personalizados (con una dependencia del complemento de Grails Hibernate) o
b) Lanza tus modificaciones meta-clase a bootstrap.groovy para aplicarlas al inicio de la aplicación