0

我想知道 groovy 中是否有一种方法可以static mapping在运行时更改 grails 类的部分。截至目前,我的域类如下所示:

class Result {

    ObjectId id

    String url

    def Result(){

    }

    void addObjectProperty(String key, value){
        this[key]=value
    }

    //No constrains defined yet.
    static constraints = {
    }

    static mapWith="mongo"

    static mapping = {
        collection "results"
        database "test"
    }
}

现在让我们说我想在运行时将映射部分更改为:

static mapping = {
    collection "xyz"
    database "mydb"
}

现在,当我调用save()一个对象时,它会将结果保存到集合 xyz 中的 mydb 中。我敢打赌,在 groovy 中有一种方法可以做到这一点,但是由于我是 groovy 的新手,所以我在这里遇到了困难……如果有人能指出我正确的方向,那就太好了。

非常感谢...

4

1 回答 1

2

请注意我上面关于这样做的智慧的评论。也就是说,您可以在运行时用 Groovy 的元类功能替换您的映射。

Result.metaClass.'static'.mapping = {
    collection "myCollection"
    database "myDatabase"
}

在 Grails 中,映射块是一个 Groovy闭包,因此您可以随时将其替换为任何其他闭包对象。这可能会产生不可预知的 Hibernate 副作用,或者什么都不做,因为我不知道何时在 Grails 应用程序生命周期中使用映射闭包来配置 Hibernate。

于 2012-11-19T21:15:35.840 回答