hibernate - 是否可以在我的 grails 应用程序上自定义 hibernate-plugin 自动生成的 CRUD 方法?

标签 hibernate grails groovy grails-plugin

我的项目副本在 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
            }
        }
    }

我是 grails/groovy 的新手,但如果我理解正确,这个闭包将动态方法的添加/删除委托(delegate)给 HibernatePluginSupport 类的 doWithDynamicMethods 闭包。
似乎 HibernatePluginSupport 类是用其余的 grails 特定代码编译的,如果 HibernatePluginSupport 的代码存在于我项目的插件副本中,我可以轻松地根据我的需要对其进行自定义。
我的问题是,如何修改特定类的自动生成方法?我看到的唯一方法是重写 groovy 文件中的 doWithDynamicMethods 闭包,但我不想这样做,因为我只是为某些域类定制它。更具体地说,如何删除/替换由“HibernatePluginSupport.doWithDynamicMethods”闭包添加的动态方法?

最佳答案

首先:动态查找器基于 Groovy 的 meta-programming features .

您不应该修改 HibernateGrailsPlugin.groovy。该文件是 Grails Hibernate 插件的一部分,在执行某些 Grails 命令时将被覆盖。

由于您可以随时在应用程序中自由修改 Groovy 对象元类,因此您可以

a) 创建您自己的 grails 插件,该插件潜入自定义动态查找器(依赖于 Hibernate Grails 插件)或

b) 将您的元类修改放入 Bootstrap.groovy 以在应用程序启动时应用它们

关于hibernate - 是否可以在我的 grails 应用程序上自定义 hibernate-plugin 自动生成的 CRUD 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443468/

相关文章:

java - 创建自定义查询方法时在 JPA 中创建查询异常

java - 我们如何测试 JPA/Hibernate 中的 N+1 问题?

grails - Grails消息驱动的POGO太早消耗消息

java - 如何在Gradle 5.x中使用自定义插件排除已解决的插件?

java - 如何使用 java.nio.Files 创建软符号链接(symbolic link)

java - 在 Oracle View 中为 Hibernate 插入设置固定值

java - hibernate openSession() 与 getCurrentSession()

grails - grails可搜索的索引null值

grails - 添加键值以在gsp中进行映射

java - 如何使用 OAuth 2.0 访问 Google 日历(服务模型)?