Rumah  >  Artikel  >  Java  >  Mengapa saya mendapat Pengecualian \"Objek Pendua dengan Pengecam Yang Sama\" dalam Hibernate?

Mengapa saya mendapat Pengecualian \"Objek Pendua dengan Pengecam Yang Sama\" dalam Hibernate?

Susan Sarandon
Susan Sarandonasal
2024-10-28 22:16:02157semak imbas

 Why am I getting a

Hibernate Exception: Duplikat Objek dengan Pengecam Yang Sama

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:

  • Entiti A (rolebean) dikaitkan dengan Entiti B (userbean) dan Entiti C (groupbean).
  • Apabila memanggil saveOrUpdate pada Entiti B, Hibernate menyimpan Entiti A sebagai sebahagian daripada perhubungan Entiti B.
  • Kemudian, apabila memanggil saveOrUpdate pada Entiti C, Hibernate cuba menyimpan Entiti A sekali lagi, tetapi sebagai contoh yang berasingan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn