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()
メソッドが同じオブジェクトを返すため、エラーがスローされます。
そのようなチェックを実行する適切な方法は何ですか?現在保存しているのと同じオブジェクトを返さないようにクエリを変更することはできますが、私の問題に対するより簡単な解決策はないのでしょうか?
ありがとう