jika seseorang dapat menjelaskan apa yang dilakukan anotasi ini dan kapan tepatnya kami menggunakannya:
@Transactional(propagation=Propagation.REQUIRED)
Terima kasih
jika seseorang dapat menjelaskan apa yang dilakukan anotasi ini dan kapan tepatnya kami menggunakannya:
@Transactional(propagation=Propagation.REQUIRED)
Terima kasih
Jawaban:
Ketika pengaturan propagasi adalah PROPAGATION_REQUIRED, lingkup transaksi logis dibuat untuk setiap metode di mana pengaturan diterapkan. Setiap lingkup transaksi logis tersebut dapat menentukan status rollback-only secara individual, dengan lingkup transaksi luar yang secara logis independen dari lingkup transaksi dalam. Tentu saja, dalam kasus perilaku PROPAGATION_REQUIRED standar, semua cakupan ini akan dipetakan ke transaksi fisik yang sama. Jadi, penanda khusus rollback yang disetel dalam cakupan transaksi dalam memang memengaruhi peluang transaksi luar untuk benar-benar berkomitmen (seperti yang Anda harapkan).
http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html
Jika Anda membutuhkan penjelasan awam tentang penggunaan di luar yang disediakan di Spring Docs
Pertimbangkan kode ini ...
class Service {
@Transactional(propagation=Propagation.REQUIRED)
public void doSomething() {
// access a database using a DAO
}
}
Ketika doSomething () dipanggil, ia tahu ia harus memulai Transaksi di database sebelum dijalankan. Jika pemanggil metode ini telah memulai Transaksi, maka metode ini akan menggunakan Transaksi fisik yang sama pada koneksi database saat ini.
@Transactional
Anotasi ini menyediakan cara untuk memberi tahu kode Anda ketika dijalankan bahwa ia harus memiliki Transaksi. Ini tidak akan berjalan tanpa satu, jadi Anda dapat membuat asumsi ini dalam kode Anda bahwa Anda tidak akan tertinggal dengan data yang tidak lengkap di database Anda, atau harus membersihkan sesuatu jika terjadi pengecualian.
Manajemen transaksi adalah topik yang cukup rumit jadi semoga jawaban yang disederhanakan ini bermanfaat
@Transactional
ke lapisan layanan Anda, tidak ada persyaratan lebih lanjut untuk juga menambahkan @Transactional
ke metode DAO yang dipanggil dalam transaksi itu.
doSomething()
memanggil metode bertingkat lain tanpa @transaksional apa pun, apakah transaksi yang sama ini juga akan berlaku untuk metode pemanggilan tersebut?
Dalam aplikasi Spring, jika Anda mengaktifkan dukungan transaksi berbasis anotasi menggunakan <tx:annotation-driven/>
dan membuat anotasi kelas / metode apa pun dengan @Transactional (propagation = Propagation.REQUIRED) maka kerangka kerja Spring akan memulai transaksi dan menjalankan metode dan melakukan transaksi. Jika terjadi RuntimeException, maka transaksi akan dibatalkan.
Sebenarnya propagation = Propagation.REQUIRED adalah tingkat propagasi default, Anda tidak perlu menyebutkannya secara eksplisit.
Untuk info lebih lanjut: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations
Untuk memahami berbagai pengaturan dan perilaku transaksional yang diadopsi untuk manajemen Transaksi, seperti REQUIRED
, ISOLATION
dll. Anda harus memahami dasar-dasar manajemen transaksi itu sendiri.
Baca Manajemen trasaksi untuk penjelasan lebih lanjut.