Semua pernyataan database dijalankan dalam konteks transaksi fisik, bahkan ketika kami tidak secara eksplisit menyatakan batasan transaksi (BEGIN / COMMIT / ROLLBACK).
Jika Anda tidak mendeklarasikan batasan transaksi secara eksplisit, maka setiap pernyataan harus dieksekusi dalam transaksi terpisah (autocommit
mode) terpisah. Ini bahkan dapat menyebabkan membuka dan menutup satu koneksi per pernyataan kecuali lingkungan Anda dapat menangani pengikatan koneksi-per-utas.
Menyatakan layanan sebagai @Transactional
akan memberi Anda satu koneksi untuk seluruh durasi transaksi, dan semua pernyataan akan menggunakan koneksi isolasi tunggal tersebut. Ini jauh lebih baik daripada tidak menggunakan transaksi eksplisit sejak awal.
Pada aplikasi besar, Anda mungkin memiliki banyak permintaan bersamaan, dan mengurangi tingkat permintaan akuisisi koneksi database pasti akan meningkatkan kinerja aplikasi Anda secara keseluruhan.
JPA tidak memberlakukan transaksi pada operasi baca. Hanya operasi tulis yang akhirnya memunculkan pengecualian yang diperlukan transaksi jika Anda lupa memulai konteks transaksional. Namun demikian, selalu lebih baik untuk menyatakan batas transaksi bahkan untuk transaksi hanya-baca (di Spring @Transactional
memungkinkan Anda menandai transaksi hanya-baca, yang memiliki manfaat kinerja yang hebat).