我有一个特殊的场景,需要知道我的一个域对象属性在静态Map中是否有一个公式。如果有一种方法可以做到这一点,那就太好了,但经过几个小时的挖掘,我无法找到任何有用的东西,而不是私人的。有没有什么方法可以得到静态Map来进行迭代?或获取特定属性是否正在使用公式?
2q5ifsrm1#
我想出了如何得到公式,虽然它是相当多的工作比我觉得它应该是。我发现的每一个可以使它更简洁的属性都被封装了。因此,我决定利用Groovy的运行时元编程支持向应用程序的Domain类添加动态方法。我已经把它放在Plugin.groovy文件的doWithApplicationContext()中,但是如果您不是在使用插件,它应该可以在Bootstrap.groovy中工作。
def grailsApplication grailsApplication.domainClasses.each { domain -> /** * Find out if a Domain property is mapped with a formula. * * @param String property * @return Boolean * */ domain.metaClass.static.isFormula = { String property -> def classPath = delegate.toString().replace("class", "").trim() return grailsApplication.getMappingContext() .getPersistentEntity(classPath) .propertiesByName[property] .propertyMapping .mappedForm .formula ?.size() > 0 } /** * Get a Domain property's formula. Returns null if no formula is found. * * @param String property * @return String * */ domain.metaClass.static.getFormula = { String property -> def classPath = delegate.toString().replace("class", "").trim() return grailsApplication.getMappingContext() .getPersistentEntity(classPath) .propertiesByName[property] .propertyMapping .mappedForm .formula ?: null } }
字符串要使用它们,您可以静态地从域类中调用它们。
import your.app.Payment if (Payment.isFormula("transactionType")) { String formula = Payment.getFormula("transactionType") }
型
1条答案
按热度按时间2q5ifsrm1#
我想出了如何得到公式,虽然它是相当多的工作比我觉得它应该是。我发现的每一个可以使它更简洁的属性都被封装了。
因此,我决定利用Groovy的运行时元编程支持向应用程序的Domain类添加动态方法。
我已经把它放在Plugin.groovy文件的doWithApplicationContext()中,但是如果您不是在使用插件,它应该可以在Bootstrap.groovy中工作。
字符串
要使用它们,您可以静态地从域类中调用它们。
型