Hibernate: Pengendalian Pengecualian dengan Pengecam Objek Pendua
Mesej ralat "Hibernate: objek berbeza dengan nilai pengecam yang sama telah dikaitkan dengan session" berlaku apabila Hibernate menemui objek dengan pengecam sedia ada yang telah dikaitkan dengan sesi semasa. Ini boleh timbul apabila cuba menyimpan atau mengemas kini objek yang sudah ada dalam sesi, mengakibatkan konflik.
Dalam kod yang disediakan:
<code class="java">public E save(E e) { Session session = null; try { session = sessionFactory.openSession(); log.debug("session="+session.hashCode()+" save "+e); session.saveOrUpdate(e); //here throws exception session.flush(); } catch (Exception e1) { log.err("Cannot open hibernate session "+ e1.getMessage()+" cause : "+e1.getCause()); e1.printStackTrace(); } finally { if ( session != null ) session.close(); session = null;} return e ; }</code>
Pengecualian dilemparkan apabila mencuba untuk saveOrUpdate kacang pengguna. Punca masalah nampaknya ialah kacang pengguna mengandungi senarai kacang kumpulan, yang seterusnya mempunyai senarai peranan. Apabila menyimpan kacang pengguna, Hibernate cuba menyimpan peranan dua kali: sekali sebagai sebahagian daripada kacang kumpulan dan sekali lagi sebagai sebahagian daripada senarai peranan kacang pengguna.
userbean#1 |---|-----------***userbean.groups | | groupbean#1 | | groupbean.roles | | rolebean#1 # save relebean#1 the first time | | ---done rolebean#1 | | ------done all rolebeans of group.roles | | ---done groupbean#1 | |-----------done all groupbeans of userbean.groups |---|-----------***userbean.roles | rolebean#1 # save rolebean#1 the second time, and throws exception here! | ----done rolebean#1 | ..... |-----------done all rolebeans of userbean.roles
Untuk menyelesaikan isu ini, pertimbangkan pendekatan berikut :
Atas ialah kandungan terperinci Mengapa Hibernate membuang \'objek berbeza dengan nilai pengecam yang sama telah dikaitkan dengan pengecualian sesi\' apabila menyimpan kacang pengguna dengan koleksi bersarang dan bagaimana. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!