Hibernate dapat memunculkan ConstraintViolationException
saat Anda mencoba menyisipkan baris yang melanggar batasan (termasuk batasan unik). Jika Anda tidak mendapatkan pengecualian itu, Anda mungkin mendapatkan pengecualian umum Hibernate lainnya - itu tergantung pada versi Hibernate dan kemampuan Hibernate untuk memetakan pengecualian MySQL ke pengecualian Hibernate dalam versi dan jenis database yang Anda gunakan ( Saya belum mengujinya dalam segala hal).
Anda hanya akan mendapatkan pengecualian setelah memanggil flush()
, jadi Anda harus memastikan ini juga ada di blok coba-tangkap Anda.
Saya akan berhati-hati dalam menerapkan solusi di mana Anda memeriksa apakah baris ada terlebih dahulu. Jika beberapa sesi memperbarui tabel secara bersamaan, Anda bisa mendapatkan kondisi balapan. Dua proses membaca baris pada waktu yang hampir bersamaan untuk melihat apakah baris tersebut ada; mereka berdua mendeteksi bahwa itu tidak ada, dan kemudian mereka berdua mencoba membuat baris baru. Seseorang akan gagal tergantung pada siapa yang memenangkan perlombaan.
Solusi yang lebih baik adalah mencoba memasukkan terlebih dahulu dan jika gagal, anggap sudah ada di sana. Namun, begitu Anda memiliki pengecualian, Anda harus memutar kembali, sehingga akan membatasi bagaimana Anda dapat menggunakan pendekatan ini.