在我的应用程序中,在一个事务中有一些我要删除的域对象,还有一些要更新:
Advertiser.withTransaction {
batch.each { record ->
if (recordsShouldBeDeleted(record))
record.delete()
else
record.save()
}
}
我知道其中一些是不同表的父键,所以我不能删除它们。 我现在想要,在循环中,如果记录无法删除,则不会发生任何事情,我会在以后处理它们。但就像现在一样,整个交易因一条记录而失败。
有没有办法知道,在我尝试删除对象之前,如果我能够这样做,那么我知道不会尝试删除这些特定对象,尽管我的recordsShouldBeDeleted
返回true? (类似于检查约束的validate()
方法?)
或者对于这种情况还有其他想法吗?
感谢。
答案 0 :(得分:1)
我通常做的是使用try / catch块包围代码,如果删除失败,则不执行任何操作。 也许这不是最好的方法,但我还没有找到不这样做的理由。
Advertiser.withTransaction {
batch.each { record ->
if (recordsShouldBeDeleted(record))
try{
record.delete()
} catch (Exception e) {}
else
record.save()
}
}