親テーブルParentと子テーブルChildがあります。関係は次のようになります。
class Parent {
...
Child child
static mapping = {
child lazy: false, cascade: 'all'
}
static constraints = { ... }
}
class Child {
String name
static constraints = {
name unique: true
}
}
既存の親に子を追加するためのコードを作成しました。次のようになります。
def parent = Parent.get(id)
parent.child = new Child(name: (name))
parent.save()
このコードは、トランザクションサービスのメソッドに含まれています。
子が無効な場合は機能しません-検証は行われません。有名な休止状態エラーが発生します:
オブジェクトは保存されていない一時インスタンスを参照します-フラッシュする前に一時インスタンスを保存します`。
簡単に説明できます。子は検証されません。GORMがオブジェクトを保存すると、子を保存しようとします。その後、失敗のために停止する必要がありますが、続行して、未保存の子フィールドを持つ親を保存しようとします。
子供が無効な場合、どうすれば回避できますか?エラーに関する情報をビューフォームに伝達する必要があります。
私はすでに子を手動で検証しようとしました-そのエラーフィールドには1つのエラーが含まれていますが、親はまだ有効です。親エラーフィールドにエラーを挿入しようとしました-親は無効になりますが、GORMはそれを保存しようとします。