@Transactional — transaction khai báo: Spring tự begin → commit → rollback, không cần connection.commit() thủ công. Mọi thao tác DB trong method chạy trong 1 transaction — bất kỳ bước nào throw exception → rollback toàn bộ (vd placeOrder gồm save order → trừ kho → charge tiền: charge fail thì cả ba cùng rollback).
Attribute chính:
- propagation — REQUIRED (default), REQUIRES_NEW (luôn tạo mới, suspend cái cũ), NESTED (savepoint).
- isolation — READ_COMMITTED (default), REPEATABLE_READ, SERIALIZABLE.
- readOnly=true — tắt dirty checking, DB route sang replica.
- rollbackFor / timeout — exception trigger rollback / giây trước khi force rollback.
Rollback mặc định: chỉ với unchecked exception; checked exception (IOException...) không rollback trừ khi rollbackFor = Exception.class.
Bẫy: gọi method @Transactional từ trong cùng class → bypass proxy → mất transaction. Fix: tách sang class khác (xem câu self-invocation).