如何在addToTag()[grails]中捕获错误

时间:2009-07-12 01:26:51

标签: grails groovy gorm

我有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,我想知道如何跟踪错误的详细信息?

感谢

1 个答案:

答案 0 :(得分:3)

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

class MasterService {

    boolean transactional = true

    def save(...) { }
}

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