NO transaction, failure after debit -> alice=60.00 bob=50.00 (money vanished) @Transactional, failure after debit -> alice=100.00 bob=50.00 (rolled back) TransactionalOperator, failure -> alice=100.00 bob=50.00 (rolled back) TransactionalOperator, success -> alice=60.00 bob=90.00 (committed) @Transactional, CHECK(balance>=0) violated on debit -> DataIntegrityViolationException; alice=100.00 bob=50.00 transfer to a non-existent account -> no error at all; alice=90.00 (debited, credit hit 0 rows)