Sebelum berbicara tentang manajemen transaksi musim semi, mari kita pikirkan bagaimana kita melakukan operasi data secara hibernasi ketika kita tidak menggunakan Spring. Di Hibernate, pertama -tama kita harus memulai transaksi, kemudian melakukan operasi data, kemudian mengirimkan transaksi, dan menutup transaksi. Alasan kami melakukan ini adalah karena komit otomatis transaksi default Hibernate adalah salah, yang mengharuskan kami untuk secara manual mengirimkan transaksi. Jika Anda tidak ingin mengirimkan transaksi secara manual setiap saat, Anda dapat mengaturnya untuk secara otomatis melakukan transaksi dalam file saya hibernate.cfg.xml:
Kode XML
<nama properti = "DefaultAutOcommit"> <value> false </ value> </propert>
Meskipun kami menetapkan metode komit transaksi untuk otomatis, ia dapat melakukan operasi data, ini tidak memenuhi kebutuhan bisnis kami yang sebenarnya, karena kadang -kadang setelah saya menyimpan satu data, saya berharap dapat terus menyimpan data lain. Saya berharap untuk melakukan transaksi bersama setelah menyimpan dua atau lebih data. Dengan cara ini, bahkan jika ada kesalahan, kita dapat memutar kembali dan mengamankan konsistensi data. Baik kesuksesan atau kegagalan. Pada saat ini, kami tidak dapat secara otomatis melakukan transaksi setelah menyimpan satu data, karena mereka tidak dalam transaksi yang sama, dan kami tidak dapat menjamin konsistensi data. Jadi saat ini kita perlu mengonfigurasi transaksi kita secara manual, yang membutuhkan penggunaan mekanisme manajemen transaksi yang disediakan oleh Spring untuk Hibernate. Manajemen transaksi yang disediakan oleh Spring dapat dibagi menjadi dua kategori: terprogram dan deklaratif. Pemrograman sebenarnya dikendalikan dalam kode. Sama seperti Hibernate mengoperasikan data, ia memulai transaksi dan mengirimkan transaksi. Metode ini memiliki keterbatasan tertentu, jadi kami umumnya menggunakan deklaratif untuk mengonfigurasi transaksi kami.
Konfigurasi transaksi deklaratif terutama dibagi menjadi langkah -langkah berikut:
1. Konfigurasi Transaksi Deklaratif
(1) Mengkonfigurasi Manajer Transaksi;
(2) karakteristik propagasi transaksi;
(3) Kelas dan metode tersebut menggunakan transaksi.
<!-Mengkonfigurasi Sesi Factory bahwa Transaction Manager menentukan fungsinya dan menyerahkan transaksi ke Spring untuk diproses-> <bean id = "TransactionManager"> <properti nama = "sessionfactory"> <Ref bean = "sessionfactory"/> </preate> </ bean> <!-mengkonfigurasi karakteristik propagasi-tx: txporpory "txporpory" txporpory "TROAD =" Transaction-Manager = "TransactionManager"> <tx: Atribut> <tx: Metode name = "save*" propagation = "wajib"/> <tx: nama metode = "delete*" propagation = "wajib"/> <tx: "name =" update*"propagation =" wajib "/> <tx: Metode name =" get*"update*" propagation = "wajib"/> <tx: Metode nama = "get*" update*"propagation =" wajib "/> <tx: Metode nama =" get*"" noagation = "noagation =" wajib "/> <tx: Metode nama =" get*" <TX: Metode Name = "*" baca-only = "true"/> </tx: Atribut> </tx: Saran> <!-Metode kelas mana yang berpartisipasi dalam transaksi-> <aop: config> <aop: pointcut id = "allserviceMethod" ekspresi = "eksekusi (*com.coe.service.*. pointcut-ref = "allserviceMethod" Advice-Ref = "txadvice"/> </aop: config>
Saat mengkonfigurasi transaksi, kami biasanya menetapkan batas transaksi ke lapisan layanan, yaitu, lapisan logika bisnis Anda, karena kami sering menyelesaikan beberapa kolom operasi data kami di lapisan logika bisnis kami. Jika ditempatkan di lapisan data DAO, granularitas terlalu kecil. Selain itu, jika kami mengonfigurasi transaksi di lapisan logika bisnis, itu juga akan bermanfaat bagi cache sekunder kami, yang akan Anda temukan di masa depan ketika Anda benar -benar mengoperasikannya.
2. Tulis metode logika bisnis
Pada saat ini, kami dapat menggunakan metode operasi data yang disediakan di HibernateTemplate untuk menulis metode logika bisnis kami di lapisan logika bisnis kami. Tentu saja, metode kami harus sama dengan yang dikonfigurasi dalam konfigurasi transaksi kami, menggunakan Simpan, Hapus, Perbarui, dan dapatkan sebagai awal dari metode kami. Perlu dicatat bahwa secara default, pengecualian runtime hanya akan memutar kembali (termasuk mewarisi subkelas runimeException), dan pengecualian biasa tidak akan bergulir.
Akhirnya, mari kita rangkum beberapa karakteristik propagasi transaksi:
1. Propagation_required: Jika ada transaksi, transaksi saat ini didukung. Jika tidak ada transaksi, itu akan diaktifkan;
2. Propagation_supports: Jika ada transaksi, transaksi saat ini didukung. Jika tidak ada transaksi, pelaksanaan non-transaksi;
3. Propagation_mandatory: Jika suatu transaksi sudah ada, transaksi saat ini didukung. Jika tidak ada transaksi aktif, pengecualian dilemparkan;
4. Propagation_requires_new: Selalu buka transaksi baru. Jika transaksi sudah ada, transaksi yang ada ditangguhkan;
5. Propagation_not_supported: Selalu jalankan non-transaksi dan tangguhkan transaksi yang ada;
6. Propagation_never: Selalu dieksekusi secara tidak transaksi, jika ada transaksi aktif, pengecualian dilemparkan;
7. Propagation_nested: Jika ada transaksi aktif, ia berjalan dalam transaksi bersarang. Jika tidak ada transaksi aktif, jalankannya sesuai dengan TransactionDefinition.propagation_required Properti.
Melalui artikel ini, saya harap ini dapat membantu Anda memahami manajemen transaksi terintegrasi Spring dan Hibernate. Terima kasih atas dukungan Anda untuk situs web ini!