2

マスターと詳細の 2 つのドメインがあります。

Master{
 String masterName; 
 static hasMany=[details:Detail]
}

Detail
{
  String detailName ; 
  static belongsTo =[master:Master];
}

保存を処理するフォームがあります

def save = {
 .....
 def master = new Master(params);
 params.detailsName.eachWithIndex(dtName, index ->
   def detail = new Detail();
   detail.detailName = dtName; 
   ....
   master.addToDetails(detail);
 }
  .....
 master.save(flush:true);
}

master.save() を呼び出したとき、詳細にエラーがある場合、マスターはまだデータを保存しています。詳細にエラーがある場合にマスターをキャンセルする方法と、エラーを詳細に追跡する方法を知りたいですか?

ありがとう

4

1 に答える 1

3

必要なのはトランザクションです。サービスで保存を実行できます。transaction=true のサービスでは、すべてのメソッドがトランザクションにラップされ、例外がスローされた場合に自動ロールバックが行われます。

class MasterService {

    boolean transactional = true

    def save(...) { }
}

または、サービスを作成したくない場合は、コントローラーでwithTransactionクロージャーを使用してコードをトランザクションにラップすることもできます。

于 2009-07-12T04:27:24.543 に答える