0

在我的应用程序中,在一个事务中,我想删除一些域对象,并更新一些域对象:

       Advertiser.withTransaction {
        batch.each {  record ->
            if (recordsShouldBeDeleted(record))
                record.delete()
            else 
                record.save()
           }
        }

我知道其中一些是不同表的父键,所以我不应该删除它们。我现在想要那个,在循环中,如果记录不能被删除,什么都不应该发生,我会在以后处理它们。但就像现在一样,整个交易因为一条记录而失败。

有没有办法知道,在我尝试删除对象之前,如果我能够这样做,那么我会知道尽管我recordsShouldBeDeleted返回 true,但不要尝试删除这些特定对象?(类似于validate()检查约束的方法?)

或者对于这种情况有什么其他想法?

谢谢。

4

1 回答 1

1

我通常做的是用 try / catch 块包围代码,如果删除失败,什么也不做。也许这不是最好的方法,但我还没有找到不这样做的理由。

Advertiser.withTransaction {
    batch.each {  record ->
        if (recordsShouldBeDeleted(record))
            try{
                record.delete()
            } catch (Exception e) {}
        else 
            record.save()
       }
    }
于 2013-05-16T11:32:39.727 回答