1

親テーブル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はそれを保存しようとします。

4

2 に答える 2

-1

この素敵な回答をありがとう、あなたの投稿のために同じ問題に直面していましたが、問題を解決しました

def val = (params.company).toInteger()
def parent = Company.get(val)
        .addToJobs(new Job(
            experience:params.months,
            jobdescription:params.desc,
            joblocation:params.companyloc,
            jobskills:params.skills,
            jobtype:params.emp,
            salary:params.jobsalary,
            jobtitle:params.jobtitle))
        .save()
于 2015-08-12T06:51:39.850 に答える