Account.withTransaction { status ->
def source = Account.get(params.from)
def dest = Account.get(params.to)
int amount = params.amount.toInteger()
if (source.active) {
source.balance -= amount
if (dest.active) {
dest.amount += amount
}
else {
status.setRollbackOnly()
}
}
}
withTransaction
Purpose
Allows programmatic transactions using Spring’s Transaction abstraction.
Examples
Named arguments may optionally be passed as an argument to control attributes of the transaction.
// the keys in the Map must correspond to properties
// of org.springframework.transaction.support.DefaultTransactionDefinition
Account.withTransaction([propagationBehavior: TransactionDefinition.PROPAGATION_REQUIRES_NEW,
isolationLevel: TransactionDefinition.ISOLATION_REPEATABLE_READ]) {
// ...
}
Description
The withTransaction
method accepts a Closure with a TransactionStatus argument. The TransactionStatus
object can be used to programmatically control rollback of the transaction.
Refer to the user guide section of Programmatic Transactions for more information.