Enterprise Orta

Manuel JPA İşlemi ile Bildirimsel @Transactional Karşılaştırması

Ayrıntılı begin/commit/rollback bloklarını tek bir @Transactional açıklamasıyla değiştirin.

✕ Java EE
@PersistenceContext
EntityManager em;

public void transferFunds(Long from, Long to,
                          BigDecimal amount) {
    EntityTransaction tx = em.getTransaction();
    tx.begin();
    try {
        Account src = em.find(Account.class, from);
        Account dst = em.find(Account.class, to);
        src.debit(amount);
        dst.credit(amount);
        tx.commit();
    } catch (Exception e) {
        tx.rollback();
        throw e;
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class AccountService {
    @PersistenceContext
    EntityManager em;

    @Transactional
    public void transferFunds(Long from, Long to,
                              BigDecimal amount) {
        var src = em.find(Account.class, from);
        var dst = em.find(Account.class, to);
        src.debit(amount);
        dst.credit(amount);
    }
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🗑️

Şablon kod yok

Tek bir açıklama, tekrarlayan begin/commit/rollback try-catch bloklarının yerini alır.

🛡️

Daha güvenli geri alma

Kapsayıcı, denetlenmemiş istisnalarda geri almayı garanti eder — catch bloğunu unutma riski yok.

📐

Bildirimsel kontrol

Yayılım, yalıtım ve geri alma kuralları açıklama öznitelikleri olarak ifade edilir.

Eski Yaklaşım
Manuel İşlem
Modern Yaklaşım
@Transactional
JDK'dan itibaren
11
Zorluk
Orta
Manuel JPA İşlemi ile Bildirimsel @Transactional Karşılaştırması
Mevcut

Jakarta EE 8 / Java 11'den itibaren geniş çapta kullanılabilir

Manuel işlem yönetimi, try-catch bloklarına sarılmış açık begin(), commit() ve rollback() çağrıları gerektirir — her hizmet yöntemi bu şablon kodu tekrar eder. @Transactional açıklaması, yaşam döngüsü yönetimini kapsayıcıya devreder: yöntemden önce bir işlem başlatır, başarıda commit eder ve RuntimeException durumunda otomatik olarak geri alır.

Paylaş 𝕏 🦋 in