Hibernate Grails如何为域类自动/动态创建方法?

Hibernate Grails如何为域类自动/动态创建方法?,hibernate,grails,gorm,hibernate-criteria,grails-domain-class,Hibernate,Grails,Gorm,Hibernate Criteria,Grails Domain Class,我正在研究Grails框架。我想知道grails域类方法是如何为grails应用程序的每个域类动态生成的,比如 伯爵, 倒计时, 创建标准, 删去 丢弃 错误, 执行, 执行更新, 存在, 获取模式, 发现 芬德尔, 芬达尔比, findAllWhere, 芬德比, 芬多比, FindorWhere, 芬多萨维比, Findorsavehere, 在这里, 第一 收到 getAll, getDirtyPropertyNames, getPersistentValue, 有错误, 有很多,, 哈松

我正在研究Grails框架。我想知道grails域类方法是如何为grails应用程序的每个域类动态生成的,比如

伯爵, 倒计时, 创建标准, 删去 丢弃 错误, 执行, 执行更新, 存在, 获取模式, 发现 芬德尔, 芬达尔比, findAllWhere, 芬德比, 芬多比, FindorWhere, 芬多萨维比, Findorsavehere, 在这里, 第一 收到 getAll, getDirtyPropertyNames, getPersistentValue, 有错误, 有很多,, 哈松, 识别号, 例如, 依依不舍, 伊迪尔蒂, 最后的 列表 listOrderBy, 负载 锁 合并 阅读 刷新 拯救 验证 哪里 有了标准, 在新闻发布会上, 随着时间的推移, 通过Transaction,您可以向任何类动态添加方法和属性

SomeClass.metaClass.newMethod  = {-> // do my stuff here }
您应该保守地使用它,以避免与尝试向同一类添加相同方法的其他库发生冲突


希望这有帮助。

在Grails3.x中,没有使用元编程来扩展域类。我认为他们使用AST而不是在Grails的最新版本中,问题中提到的方法是在Grails自动添加到Groovy域类的特性中定义的。看见例如,count方法定义在


我希望这会有所帮助。

在Grails3.x中,没有使用元编程来扩展域类这并不完全正确。我们仍然使用运行时元编程来处理动态查找器等无法在编译时装配的东西。过去使用运行时元编程所做的许多其他事情已经被基于特征的解决方案或自定义AST转换所取代,但Grails 3中仍然使用运行时元编程。有没有一种方法可以将方法添加到所有域中呢?有很多方法可以做到这一点:继承、特征、元编程,如下面的答案所示。