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

Grails 5:如何判断域类属性在映射中是否配置了Formula?

判断Grails域对象属性是否配置了Formula映射

直接判断单个属性是否配置Formula

可以通过Grails提供的公开域类元数据API来获取属性的映射配置,无需依赖私有方法。核心思路是获取域类的GrailsDomainClass实例,然后提取指定属性的映射信息,检查是否存在formula配置:

import grails.core.GrailsDomainClass
import grails.core.GrailsDomainClassProperty

def hasFormula(Class domainClass, String propertyName) {
    GrailsDomainClass domainMeta = grailsApplication.getDomainClass(domainClass.name)
    GrailsDomainClassProperty prop = domainMeta.getPropertyByName(propertyName)
    if (!prop) {
        return false
    }
    def propMapping = domainMeta.mapping.getPropertyMapping(propertyName)
    return propMapping?.formula != null
}

调用示例:hasFormula(Book, "averageRating"),返回布尔值表示该属性是否配置了Formula。

遍历所有配置了Formula的属性

如果需要遍历域类中所有带有Formula配置的属性,可以遍历域类的propertyMappings集合:

import grails.core.GrailsDomainClass

def getPropertiesWithFormula(Class domainClass) {
    GrailsDomainClass domainMeta = grailsApplication.getDomainClass(domainClass.name)
    def result = []
    domainMeta.mapping.propertyMappings.each { propName, mapping ->
        if (mapping.formula) {
            result << propName
        }
    }
    return result
}

调用后会返回一个包含所有配置了Formula的属性名列表。

说明

上述代码中使用的grailsApplication是Grails应用上下文的核心bean,可在服务类、控制器或脚本中直接注入使用。这些API均为Grails框架公开的核心接口,不存在私有API的兼容性风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:53:08