0

私は2つのドメインクラスを持っています

class a {
    String name
    static constraints = {
        name unique:true
    }
}

class b {
    String description
}

ドメインクラスbでクラスaを呼び出したい

import a
class b {
    String description
    static constraints = {
         description unique:'a.name'
    }
}

エラーが発生します

クラス [b] のプロパティ [説明] の制約 [一意] のスコープは、同じクラスの有効なプロパティ名でなければなりません

クラスaからbへのプロパティを取得するにはどうすればよいですか?

4

2 に答える 2

1

の単一インスタンスが持つよりも多くの情報に依存するため、一意性をチェックするカスタム バリデータを作成する必要がありbます。

何かのようなもの

static constraints {
     description validator: { val ->
         !a.findByName(val)
     }
}

トリックを行うかもしれません。

于 2013-03-12T18:26:28.467 に答える
1

Grails 2+でこれをやろうとすると

そのように検証を使用することはできません。あなたの例では、同じドメイン クラスのプロパティを参照する必要があります。クラスの制約を修正するには、次のようにB記述できます。

class B {
    String description
    static contraints = {
        description unique:true
    }
}

aしかし、このように行われるクラスから制約をインポートしたいと思います。

class B {
    String description
    static contraints = {
        importFrom A
    }
}

http://grails.org/doc/latest/guide/validation.html#sharingConstraintsを参照してください

これにより、2 つのクラスが共有するプロパティに対するすべての制約がインポートされます。あなたの場合はどれもありません。


アップデート

同様の質問があり、その解決策を見つけました。そこで、ここであなたと共有しようと思いました。この問題は、カスタム バリデータで解決できます。あなたの場合、クラスの制約B:

static constraints = {

    description(validator: {
        if (!it) {
            // validates to TRUE if the collection is empty
            // prevents NULL exception
            return true
        }

        def names = A.findAll()*.name
        return names == names.unique()
    })
}

要件が少し変わっているため、質問に正しく答えるのは困難です。しかし、多分それは役立つでしょう。

于 2013-03-12T18:27:31.253 に答える