如何在grails 2.5.6中的运行时异常期间隔离单个删除(..)?

时间:2018-02-14 08:37:32

标签: grails gorm grails-2.0 grails-domain-class grails-controller

我正在研究传统的grails 2.5.6项目。

作为逻辑的一部分,当检测到孤立记录时,抛出异常(RuntimeException类型)。这样做时,必须删除孤立记录。此逻辑位于服务方法调用的深层内部,这些调用位于大事务块中(默认情况下)。

以下是示例代码:

...
financialTransactionItem.delete(flush:true); /* flush: true is for a reason here */
throw new ServiceException(...);
...

但是,显然,当抛出ServiceException(派生自RuntimeException)并且孤立记录(financialTransactionItem)保留在那里时,将回滚删除。

仍然需要回滚,因为必须丢弃其他数据库事务。

我的问题是:我怎么能两个都做?即回滚指定删除操作以外的所有内容吗?

1 个答案:

答案 0 :(得分:0)

我将delete语句包含在withNewTransaction(...)块中,并且回滚没有影响删除操作。

FinancialTransactionItem.withNewTransaction {TransactionStatus status ->

    FinancialTransactionItem obsoleteFinancialTransactionItem = FinancialTransactionItem.get(ftiItemId);

    if(obsoleteFinancialTransactionItem){

        obsoleteFinancialTransactionItem.delete(flush: true);
    }
}