2009-07-12 52 views
2

我有2个域..主控和细节。如何捕捉addToTag()错误[grails]

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(形式),如果在细节上存在错误,主仍保存数据。我想知道如何取消主如果有细节错误,我想知道如何跟踪细节的错误?

感谢

回答

3

事务是你所需要的。您可以在服务中执行保存。在与交易=真正的服务,所有的方法都被包含在交易中会有如有异常被抛出的自动回退:

class MasterService { 

    boolean transactional = true 

    def save(...) { } 
} 

或者你可以使用withTransaction封在控制器来包装你的代码在一个事务中如果你不想创建服务。

+0

我没有使用事务,但我不知道如何知道有错误/细节无效插入(可能是名称为空或日期为空等)。 据我所知,当细节无效时,标题仍然插入,导致细节无法保存。 一旦你addTo *()它将附加对象而不会引发任何错误。但是当你保存()细节不会保存,如果有错误,我不能得到错误消息。 – nightingale2k1 2009-07-13 01:47:16