grails - 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 中执行此操作?即,获取域类的所有持久属性?
解决方案
DefaultGrailsDomainClass
从Grails 3.3.2开始确实不推荐使用,而支持映射上下文 API。幸运的是,替换已弃用的实现非常简单。
在您的服务或控制器中注入grailsDomainClassMappingContext
bean:
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
。
这些接口PersistentEntity
并PersistentProperty
提供了多种有用的方法来涵盖许多用途。
推荐阅读
- neo4j - Neo4j:通过两种类型的节点传播标签
- node.js - 如何将数据从服务器代码呈现到 ejs 模板?
- java - 为什么我不能直接投射 super 调用的结果?
- python-3.x - 数据流作业不产生任何输出
- laravel - Laravel 刀片模板中的条件结构不起作用
- sql - 3张表一一匹配,得到最终列值
- python - NumPy 就地重塑数组
- flutter - 如何在flutter中从sqlite获取最后一个条目?
- laravel - 如何在 laravel 中的 DB select 和 DB raw 之后获取值
- android - 在 Repository 类中观察 Forever 是一个好习惯吗?db+network 分页列表