financialTransactionItem

financialTransactionItem

我正在做一个遗留的grails 2.5.6项目。

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

这是一个示例代码:

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

但是,显然,当抛出ServiceException(源自RuntimeException)并且孤立记录(financialTransactionItem)停留在此位置时,删除操作会回滚。

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

我的问题是:我该怎么做?即回滚除指定删除操作之外的所有内容?

最佳答案

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

FinancialTransactionItem.withNewTransaction {TransactionStatus status ->

    FinancialTransactionItem obsoleteFinancialTransactionItem = FinancialTransactionItem.get(ftiItemId);

    if(obsoleteFinancialTransactionItem){

        obsoleteFinancialTransactionItem.delete(flush: true);
    }
}

09-25 17:50