Sepertinya Anda telah mengonfigurasi Hibernate untuk menggunakan kontrol konkurensi yang optimis . Itu berarti tabel Pengguna Anda memiliki bidang versi yang ditingkatkan Hibernasinya pada setiap pembaruan baris.
Kemungkinan besar transaksi Anda dimulai di awal permintaan HTTP dan berakhir di akhir respons HTTP. Artinya, proses pengeditan pengguna terdiri dari dua transaksi:satu transaksi untuk mengisi formulir web dan satu transaksi untuk menyimpan perubahan.
Dalam hal ini, mengubah tingkat isolasi database tidak akan ada gunanya. Kemungkinan besar yang akan Anda dapatkan hanyalah kinerja dan skalabilitas yang lebih buruk .
Bukan hal yang buruk untuk memiliki StaleObjectException
s. Ini mencerminkan dunia nyata - orang benar-benar mengerjakan hal yang sama sesekali dan konflik dapat terjadi. Pertanyaannya adalah, ketika konflik telah terdeteksi, bagaimana Anda menyelesaikannya dengan cara yang memuaskan pengguna akhir? Bisakah itu diselesaikan tanpa bantuan pengguna?
Strategi yang mungkin bisa dilakukan adalah
-
menimpa perubahan pengguna sebelumnya (seringkali bukan yang Anda inginkan - karenanya perlu kontrol konkurensi),
-
tampilkan pesan kesalahan yang meminta pengguna untuk menyegarkan dan melakukan perubahannya lagi,
-
menggabungkan perubahan secara otomatis tanpa menimpa perubahan pengguna sebelumnya (terkadang mungkin)
-
beri tahu pengguna tentang kedaluwarsa datanya dan tawarkan cara untuk menggabungkan perubahannya secara manual
Itu semua tergantung pada konteksnya.