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

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

我知道其中一些是另一个表的父键,因此我不能删除它们。
我现在想在循环中,如果无法删除该记录,则什么也不会发生,稍后再处理。但就目前而言,由于一笔记录,整个交易失败了。

有没有办法知道,在我尝试删除对象之前,如果可以的话,尽管我的recordsShouldBeDeleted返回true,但我不打算删除这些特定对象? (类似于validate()方法来检查约束吗?)

或对此情况还有其他想法吗?

谢谢。

最佳答案

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

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

关于hibernate - Grails-告诉对象是否可以删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16584997/

10-13 03:28