首页 > 解决方案 > Grails 4 替代 DefaultGrailsDomainClass?

问题描述

我正在 Grails 4 中重新创建一个有效的 Grails 2.2.5 应用程序,以便了解新版本(以期在适当的时候迁移所有 2.2.x 应用程序)。到目前为止,我只从 src 目录中移动了几个 Groovy 类,但是我遇到了一个编译问题,该类显然不再存在于 Grails 4 中,即 org.codehaus.groovy.grails.commons。默认GrailsDomainClass。我使用它来遍历域类的持久属性(使用persistentProperties)。我将如何在 Grails 4 中执行此操作?即,获取域类的所有持久属性?

标签: grails

解决方案


DefaultGrailsDomainClass从Grails 3.3.2开始确实不推荐使用,而支持映射上下文 API。幸运的是,替换已弃用的实现非常简单。

在您的服务或控制器中注入grailsDomainClassMappingContextbean:

def grailsDomainClassMappingContext

然后通过提供其名称来获取持久实体:

def entity = grailsDomainClassMappingContext.getPersistentEntity(domainObjName)

wheredomainObjName是一个字符串,entity是 的一个实例org.grails.datastore.mapping.model.PersistentEntity。您还可以使用以下方法获取特定属性:

def property = entity.getPropertyByName(propertyName)

wherepropertyName是一个字符串,property是 的一个实例org.grails.datastore.mapping.model.PersistentProperty

这些接口PersistentEntityPersistentProperty提供了多种有用的方法来涵盖许多用途。


推荐阅读