You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails 5.0.1 如何获取Domain类的transient瞬态属性

Grails获取领域类transient属性的实现方案

你可以直接通过Grails核心的DomainClass API获取所有属性(包含持久化和transient属性),不需要依赖Hibernate专属的持久化实体类,该API原生支持scaffolding场景的属性遍历需求。

实现步骤

  • 首先注入grails.core.grailsApplication Bean,所有领域类的元数据都可以通过该实例获取
  • 调用grailsApplication.getDomainClass(你的领域类全限定名)拿到对应领域类的DomainClass实例
  • 遍历DomainClass的properties属性即可拿到所有字段,包括transient属性,如果要单独筛选transient字段可以结合isPersistent()方法判断:返回false的就是transient属性

示例代码

// 注入grailsApplication
def grailsApplication

// 获取指定Domain的元数据
def domainClass = grailsApplication.getDomainClass("com.example.YourDomain")

// 遍历所有属性,筛选transient字段
def transientProperties = domainClass.properties.findAll { !it.persistent }

// 如果你需要同时拿持久化和transient的所有属性
def allProperties = domainClass.properties

适配自定义scaffolding的优化方案

如果你是在自定义脚手架模板里调用,可以直接在模板上下文中获取domainClass实例,不需要额外注入Bean:

// scaffolding模板中直接遍历所有属性渲染
<% domainClass.properties.each { prop -> %>
    <div class="field">
        <label>${prop.naturalName}</label>
        <g:field name="${prop.name}" value="${domainInstance?."${prop.name}"}" />
    </div>
<% } %>

注意:如果你的项目使用的是Grails 3+版本,API路径略有调整,对应类为grails.core.DomainClass,用法完全一致,不需要修改逻辑。

内容的提问来源于stack exchange,提问作者Pedro Gentil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:36:08