START TRANSACTION; -- 开启事务 -- 执行各种数据操作 INSERT INTO orders VALUES(...); UPDATE accounts SET balance = balance - 100; COMMIT; -- 提交事务
@Transactional public void transferMoney(Long fromAccount, Long toAccount, BigDecimal amount) {
try {
accountRepository.deductBalance(fromAccount, amount);
// 模拟业务异常
if (amount.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException("转账金额不能为负");
}
accountRepository.addBalance(toAccount, amount);
} catch (Exception e) {
// Spring会自动回滚RuntimeException
throw new RuntimeException("转账失败", e);
}
}
你可能想看: