0

static mapping実行時にgrailsクラスのセクションを変更する方法がgroovyにあるかどうか疑問に思いました。今のところ、私のドメインクラスは次のようになっています。

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クロージャーであるため、いつでも自由に他のクロージャー オブジェクトに置き換えることができます。Grails アプリのライフサイクルで Hibernate を設定するためにマッピング クロージャがいつ使用されるかがわからないため、これは予測不可能な Hibernate の副作用をもたらすか、まったく何もしない可能性があります。

于 2012-11-19T21:15:35.840 に答える