Masalah:
Apabila menggunakan session.saveOrUpdate(e) dengan objek yang mempunyai hubungan dengan entiti lain, pengecualian mungkin dilemparkan menunjukkan "objek berbeza dengan nilai pengecam yang sama telah dikaitkan dengan sesi."
Penjelasan:
Pengecualian ini berlaku apabila Hibernate mengesan berbilang kejadian entiti yang sama dengan pengecam yang sama dalam satu sesi. Berikut ialah ilustrasi ringkas situasi:
Penyelesaian:
Penyelesaian bergantung pada tingkah laku yang diingini:
1. Kekalkan Perhubungan melalui Gabungan:
Untuk mengelakkan kejadian pendua, gunakan session.merge(e) dan bukannya saveOrUpdate. Gabungan mengandaikan bahawa kejadian terpisah bagi entiti (Entiti A dalam kes ini) harus dilampirkan pada sesi dan sebarang perubahan harus digabungkan ke dalam versi yang dilampirkan.
2. Pastikan Ketekalan dalam Tugasan:
Jika anda ingin terus menggunakan saveOrUpdate, pastikan contoh entiti yang sama diberikan kepada semua entiti berkaitan. Ini bermakna apabila menambahkan Entiti A pada perhubungan Entiti B dan Entiti C, tika Entiti A yang sama harus digunakan.
Contoh:
<code class="java">// Ensuring the same instance of rolebean is assigned to both userbean and groupbean rolebean.setUserbean(userbean); groupbean.getGroups().add(rolebean);</code>
Nota:
Pembetulan khusus bergantung pada kod yang melaksanakan tugasan. Adalah penting untuk memastikan bahawa contoh entiti yang sama digunakan semasa mewujudkan perhubungan untuk mengelakkan isu objek pendua.
Atas ialah kandungan terperinci Mengapa saya mendapat Pengecualian \'Objek Pendua dengan Pengecam Yang Sama\' dalam Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!