Hibernate NonUniqueObjectException: Menyelesaikan Konflik Keadaan Berterusan
Menemui org.hibernate.NonUniqueObjectException semasa menyimpan objek Hibernate boleh membingungkan. Pengecualian ini berlaku apabila Hibernate mengesan bahawa objek dengan pengecam yang sama seperti yang dikekalkan sudah dikaitkan dengan sesi semasa.
Untuk menangani isu ini, adalah penting untuk memahami pengurusan keadaan berterusan Hibernate. Hibernate menjejaki keadaan berterusan objek berdasarkan nilai pengecamnya. Jika berbilang objek mempunyai pengecam yang sama, Hibernate menganggapnya sebagai objek yang sama, walaupun ia adalah kejadian yang berbeza. Ini boleh membawa kepada konflik apabila cuba menyimpan atau mengemas kini objek.
Dalam coretan kod yang disediakan, jelas bahawa userObj1 dan userObj2 mempunyai nilai pengecam yang sama. Ini mungkin disebabkan oleh simpanan melata atau manipulasi objek manual. Untuk menyelesaikan isu ini, adalah penting untuk mengesan kod dan mengenal pasti punca perlanggaran pengecam.
Salah satu punca yang mungkin ialah penggunaan kaedah session.save() tanpa memastikan objek belum dilampirkan pada sesi itu. Hibernate menyimpan objek hanya jika ia belum berterusan. Percubaan untuk menyimpan objek yang dilampirkan akan menghasilkan pengecualian.
Satu lagi isu yang berpotensi berkaitan dengan penjana kunci utama. Penjana khusus mungkin memerlukan penetapan manual nilai pengecam, yang boleh menyebabkan konflik jika tidak dikendalikan dengan betul.
Jika anda mengalami pengecualian ini, disyorkan untuk:
Atas ialah kandungan terperinci Cara Menyelesaikan NonUniqueObjectException Hibernate: Panduan Terperinci. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!