Uruchamia metodę w transakcji; domyślnie Spring robi rollback na unchecked (`RuntimeException`). Typowa pułapka to self-invocation: wywołanie `@Transactional` z tej samej klasy omija proxy, więc transakcja może się nie uruchomić.
@Service
class PaymentService {
@Transactional
public void pay() {
// DB writes here
}
}W większości aplikacji Spring implementuje `@Transactional` przez AOP **proxy**. Proxy otwiera transakcję przed wykonaniem metody i robi commit/rollback po jej zakończeniu.
Spring robi rollback dla:
Checked exceptions **nie** powodują rollback, jeśli tego nie ustawisz:
@Transactional(rollbackFor = Exception.class)Transakcja działa tylko, gdy wywołanie przejdzie **przez proxy**. `this.jakiesTransactional()` zostaje „w środku” beana i omija proxy.