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() 时,如果详细有错误,master 仍然保存数据。我想知道如果细节有错误如何取消master,我想知道如何跟踪细节错误?

谢谢

4

1 回答 1

3

交易是您所需要的。您可以在服务中执行保存。在事务=true 的服务中,所有方法都包装在事务中,如果抛出任何异常,将自动回滚:

class MasterService {

    boolean transactional = true

    def save(...) { }
}

或者,如果您不想创建服务,则可以使用控制器中的withTransaction闭包将代码包装在事务中。

于 2009-07-12T04:27:24.543 回答