Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Penanganan pembaruan bersamaan dalam hibernasi

Adakah yang bisa menjelaskan kepada saya jika kita menggunakan pegas untuk manajemen transaksi, bagaimana pembaruan bersamaan akan ditangani oleh hibernate (Dalam memori manajemen versi otomatis hibernasi) atau saya harus meletakkan kolom versi di database untuk menangani pembaruan bersamaan secara manual.

Apakah Anda menggunakan Spring untuk manajemen transaksi atau tidak tidak terlalu penting dan tidak relevan dalam hal manajemen konkurensi, ini sebenarnya ditangani oleh Hibernate. Hibernate dapat menggunakan 2 strategi untuk menangani pembaruan bersamaan:penguncian optimis dan penguncian pesimis.

Optimis

Saat menggunakan penguncian optimis, Anda memetakan atribut khusus (angka, stempel waktu) sebagai versi (jadi Anda benar-benar memiliki kolom untuk itu). Versi ini dibaca saat Anda mengambil entitas dan disertakan di klausa where selama pembaruan dan ditambah oleh Hibernasi.

Untuk mengilustrasikan cara kerjanya, bayangkan Anda memuat entitas Person dengan id=1 dan dengan versi=1 saat ini. Setelah menyimpan, Hibernate akan melakukan sesuatu seperti ini:

update PERSON set ID=1, NAME='NAME 1', VERSION=2 where ID=1 and VERSION=1;

Jadi, sekarang, bayangkan Anda menjalankan dua transaksi bersamaan, masing-masing memuat sama entitas (nomor versi yang sama) dan mengubah nama.

Katakanlah transaksi #1 dilakukan terlebih dahulu, kueri berikut dilakukan:

update PERSON set ID=1, NAME='NAME 1', VERSION=2 where ID=1 and VERSION=1;

Berhasil dan versi bertambah.

Kemudian transaksi #2 dilakukan, query berikut dilakukan:

update PERSON set ID=1, NAME='NAME 2', VERSION=2 where ID=1 and VERSION=1;

Yang ini tidak akan memperbarui apa pun karena klausa where tidak akan cocok dengan catatan apa pun. Di sinilah Anda akan mendapatkan pengecualian konkurensi optimis.

Strategi ini sesuai ketika Anda tidak mempertahankan koneksi, ketika akses bersamaan tidak sering, dan menskalakan dengan sangat baik. Dan semuanya tentu saja ditangani secara transparan oleh Hibernate untuk Anda, selama Anda memetakan atribut versi.

Pesimis

Saat menggunakan penguncian pesimis, Hibernate mengunci catatan untuk penggunaan eksklusif Anda sampai Anda selesai menggunakannya (biasanya menggunakan SELECT ... FOR UPDATE ). Transaksi bersamaan lainnya yang mencoba mengakses catatan yang sama akan ditangguhkan hingga kunci dihapus. Strategi ini memberikan prediktabilitas yang lebih baik, dengan harga kinerja dan tidak diskalakan tanpa batas.

Referensi

  • Panduan Referensi Inti Hibernasi
    • 11.3. Kontrol konkurensi yang optimis
    • 11.4. Penguncian pesimis


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengkloning pengguna di Oracle

  2. Hibernate Buat Kriteria untuk bergabung dengan tabel yang sama dua kali - mencoba 2 pendekatan dengan 2 kesalahan perbedaan

  3. ORA-01652:tidak dapat memperpanjang segmen temp sebesar 128 di tablespace SISTEM:Bagaimana cara memperpanjang?

  4. C#:Kesetaraan Tipe Data Oracle dengan OracleDbType

  5. Cara menggunakan Fungsi Oracle LISTAGG