0

name (String)&の 2 つのフィールドを持つ ClientAttribute ドメイン クラスがありますproject (Project)。と の間には 1 対多の関係がProjectあり、ClientAttribute単一のプロジェクト内では、すべての名前が一意である必要があります。

最初に、次のバリデータを作成することを考えました:

name(blank: false, validator: { val, obj ->
            if (ClientAttribute.findByProjectAndName(obj.project, val)) return ['clientAttribute.name.unique']
        })

残念ながら、新しいインスタンスを作成するときは、プロジェクト インスタンスClientAttributeのフィールドに新しいインスタンスを追加しclientAttributes、プロジェクト インスタンスを保存します。これにより、残りのオブジェクトがセットに保存されclientAttributesます。セットに 2 番目のオブジェクトを保存すると、バリデーターが起動され、findBy()メソッドが同じオブジェクトを返すため、エラーがスローされます。

そのようなチェックを実行する適切な方法は何ですか?現在保存しているのと同じオブジェクトを返さないようにクエリを変更することはできますが、私の問題に対するより簡単な解決策はないのでしょうか?

ありがとう

4

1 に答える 1

1

あなたのドメイン モデルが理解できないかもしれませんが、プロジェクトと名前の両方で ClientAttribute のGrails Unique Constraintを使用できない理由は何ですか? このような:

name blank: false, unique: 'project'
于 2012-09-11T02:46:40.373 に答える