1

オブジェクト階層にカスケードされた保存を取得するのに問題があります。以下は私のオブジェクト階層のコードです。

class Entity {
    static hasMany = [attributes: Attribute]
}

class Attribute extends ValuePossessor {
    static belongsTo = Entity
}

abstract class ValuePossessor {
    def valueService
    Value value
    void setValue(val) {
        this.value = valueService.Create(val)
        this.value.possessor = this
    }
}

abstract class Value {
    static belongsTo = [possessor: ValuePossessor]
}

class StringValue extends Value {
    String value
}

valueServiceは、正しい値の型(string、boolean、intなど)を作成する大きなswitchステートメントを持つ単純なサービスです。

Entity e = new Entity()
Attribute attr = new Attribute()
attr.setValue(1)
e.addToAttributes(attr)
e.save()

上記のコードはすべてのオブジェクトを正しく作成しますが、値オブジェクトの保存に失敗します。エンティティと属性は保存されますが、値は保存されません。値オブジェクトまでカスケードするために必要な識別子がありませんか?

4

1 に答える 1

2

これを理解しました。どうやら、Grailsのダイナミックセッターにはいくつかの魔法があります。setValue(val)メソッドをに変更するset(val)と、機能し始めました。教訓:魔法、妖精の粉、ユニコーンの尿で作られているため、動的に追加されたグレイルのメソッドをオーバーライドしないでください。

于 2013-01-23T21:03:03.613 に答える