Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 21246|Jawab: 0

[Sumber] objek yang berbeda dengan nilai pengidentifikasi yang sama sudah dikaitkan dengan...

[Salin tautan]
Diposting pada 01/07/2016 10.48.52 | | | |
objek yang berbeda dengan nilai pengidentifikasi yang sama sudah dikaitkan dengan sesi: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, dari entitas: XXX



Saya telah mengalami kesalahan ini dua kali secara total, dan saya tidak pernah menemukan solusi yang baik, dan kesalahan ini terjadi

Alasannya mungkin sudah diketahui, karena dalam hibernasi ada dua logo identik dalam sesi yang sama

Namun, jika itu adalah entitas yang berbeda, kesalahan ini akan dilaporkan saat menjalankan operasi saveOrUpdate(object).

Hehe, mungkin kamu akan berkata, tidak ada perbedaan antara apa yang kamu katakan dan apa yang tidak kamu katakan, aku akui, hehe, aku tidak tahu spesifiknya

Mengapa kesalahan ini terjadi, jika tidak, itu tidak akan terselesaikan untuk waktu yang lama, sekarang, berikan yang sementara

Solusinya adalah memberi orang-orang seperti saya yang tidak memiliki cara untuk menemukan akar penyebabnya cara untuk terus menerapkan

(Tentu saja benar, tetapi tidak dimulai dengan penyebabnya)
    Faktanya, sangat mudah untuk memecahkan masalah ini, cukup lakukan operasi session.clean()

Tetapi Anda melakukan operasi saveOrUpdate(object) setelah operasi pembersihan, yang dimungkinkan

"Menemukan dua representasi dari koleksi yang sama", saya mencari banyak informasi.

Tidak ada penjelasan yang baik, yang paling membantu artikel ini

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。

Akhirnya, ini dapat diselesaikan dengan metode session.refresh(object), perhatikan bahwa ketika objek tidak

Jika itu adalah objek dengan data dalam database, Anda tidak dapat menggunakan faktor session.refresh(object)

Untuk refresh adalah mengambil ulang objek dari sesi hibernasi, jika tidak ada objek dalam sesi

Jika ada objek ini, kesalahan akan dilaporkan, jadi Anda perlu menilai sebelum menggunakan saveOrUpdate(object).

Hancurkan

    Tentu saja, solusi termudah untuk masalah ini adalah dengan menggunakan merge() yang disertakan dengan Hibernate.

metode. Namun, saya selalu merasa bahwa ketika saya mengalami masalah, saya menggunakan metode yang sangat berguna yang disertakan dengan perangkat lunak ini

(dibandingkan dengan saveOrUpdate(), save(), update()) terasa sangat tidak menyenangkan.
    Kemudian saya juga menemukan bahwa kesalahan ini sering muncul dalam pemetaan satu-ke-banyak dan pemetaan banyak-ke-banyak, silakan berada di sini

Berhati-hatilah saat menggunakan pemetaan satu-ke-banyak dan banyak-ke-banyak
Pemecahan Masalah dan Penanganan Hibernasi
1、objek berbeda dengan nilai pengidentifikasi yang sama sudah dikaitkan dengan sesi。
Alasan kesalahan: Dalam hibernasi, ada dua identitas identik dalam sesi yang sama, tetapi entitas yang berbeda.
Solusi 1: session.clean()
PS: Jika Anda melakukan operasi untuk mengubah status data seperti saveOrUpdate(object) setelah operasi pembersihan, Anda mungkin menerima pengecualian "Menemukan dua representasi dari koleksi yang sama".
Solusi 2: session.refresh(object)
PS: Ketika objek bukan objek dengan data dalam database, Anda tidak dapat menggunakan session.refresh(object) karena metodenya adalah untuk mengambil ulang objek dari sesi hibernasi, jika tidak ada objek dalam sesi, kesalahan akan dilaporkan, jadi Anda perlu menilai sebelum menggunakan saveOrUpdate(object).
Solusi 3: session.merge(objek)
PS: Metode Hibernate sendiri direkomendasikan.
2、Menemukan dua representasi dari koleksi yang sama
Penyebab kesalahan: Lihat 1.
Solusinya: session.merge(objek)
Dua anomali di atas sering muncul dalam pemetaan satu-ke-banyak dan pemetaan banyak-ke-banyak




Kesalahan menyebabkan:

Mitos:Anda tidak dapat membuat objek pengguna baru dan kemudian mendapatkan informasi pengguna berdasarkan ID pengguna dan menetapkannya ke objek ini, sehingga objek yang berbeda dengan nilai pengidentifikasi yang sama sudah dikaitkan dengan kesalahan sesi!!





Mantan:Penggunaan dinamis di C# 4.0
Depan:Mengkloning replikasi dangkal objek c#
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com