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

Mengapa Penguncian pesimis saya di JPA dengan Oracle tidak berfungsi

Akhirnya saya berhasil membuatnya bekerja tetapi dengan beberapa modifikasi. Idenya adalah menggunakan LockModeType.PESSIMISTIC_FORCE_INCREMENT alih-alih PESSIMISTIC_WRITE. Dengan menggunakan mode kunci ini, Cron Jobs berperilaku sebagai berikut:

  1. Saat pekerjaan pertama membuat pilihan untuk pembaruan, semuanya berjalan seperti yang diharapkan tetapi versi pada objek berubah.
  2. Jika pekerjaan lain mencoba membuat pilihan yang sama saat yang pertama masih dalam transaksinya, JPA meluncurkan OptimisticLockException sehingga jika Anda menangkap pengecualian itu, Anda dapat yakin bahwa itu dilemparkan untuk kunci baca.

Solusi ini memiliki berbagai mitra:

  1. SynchronizedCronJobTask harus memiliki bidang versi dan berada di bawah kontrol versi dengan @Version
  2. Anda perlu menangani OptimisticLockException, dan itu harus ditangkap di luar metode layanan transaksional untuk melakukan rollback saat de lock terjadi.
  3. IMHO adalah solusi yang tidak elegan, jauh lebih buruk dari sekadar kunci tempat Cron Jobs menunggu Pekerjaan sebelumnya selesai.


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

  2. Mengelola penanganan kesalahan saat menjalankan sqlplus dari skrip shell

  3. Bagaimana cara mengatur wilayah zona waktu untuk Koneksi JDBC dan menghindari wilayah zona waktu SqlException tidak ditemukan?

  4. 2 Cara Menghapus Baris Duplikat di Oracle

  5. Hasil tidak berurutan dalam SQL