代码之家  ›  专栏  ›  技术社区  ›  nightingale2k1

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

  •  2
  • nightingale2k1  · 技术社区  · 15 年前

    我有两个域名……主控形状和细节。

    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,我想知道如何跟踪细节上的错误?

    谢谢

    1 回复  |  直到 15 年前
        1
  •  3
  •   John Wagenleitner    15 年前

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

    class MasterService {
    
        boolean transactional = true
    
        def save(...) { }
    }
    

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