Groovy - 如何使用动态域类静态函数

时间:2014-06-11 06:18:15

标签: groovy gorm

我有域对象列表,需要按如下方式调用每个域对象:

(<DOMAIN CLASS>.withCriteria {
                    dataSecurityGroups {
                        'in' 'id', entitiesIds as Long[]
                    }
                })

我们的想法是将代码改为一次,同时更改给定参数的代码。
我知道有几种方法可以使用groovy来实现它,我试着全部使用它们。
我需要知道什么是最佳做法和简短的方法。

谢谢!

3 个答案:

答案 0 :(得分:0)

我假设你使用的是Grails,因为你用Gorm标记了这个问题。如果是这样,试试这个:

Class clazz = grailsApplication.domainClasses.find { it.clazz.simpleName == "<DOMAINCLASS>" }.clazz
clazz.withCriteria {
    dataSecurityGroups {
        'in' 'id', entitiesIds as Long[]
    }
}

或者替换grailsApplication.domainClasses并使用您的域类列表。

答案 1 :(得分:0)

你说你有一个域类列表,所以下面的代码假设是真的。你没有说你想对每个查询的结果做什么,所以我假设你已经控制了它。

你可以这样做......

def listOfDomainClasses = // you have initialized this list somehow...

listOfDomainClasses.each { domainClass ->
    def resultForThisClass = domainClass.withCriteria {
        dataSecurityGroups {
            'in' 'id', entitiesIds as Long[]
        }
    })

    // do something with resultForThisClass
}

我希望有所帮助。

答案 2 :(得分:0)

目前尚不清楚你真正想做什么,但也许你想要的是写一个像这样的方法......

/**
 * @param someDomainClass A domain class
 * @return the results of the query
 */
def myQueryMethod(Class someDomainClass) {
    someDomainClass.withCriteria {
        dataSecurityGroups {
            'in' 'id', entitiesIds as Long[]
        }
    }
}

然后,您可以调用该方法并将任何域类作为参数传递。

这是你要找的东西吗?