Saya pada dasarnya memiliki beberapa objek dalam konfigurasi ini (model data sebenarnya sedikit lebih kompleks):
- A memiliki hubungan banyak-ke-banyak dengan B. (B memiliki
inverse="true"
) - B memiliki hubungan banyak-ke-satu dengan C. (saya telah
cascade
menyetel ke"save-update"
) - C adalah sejenis tabel tipe / kategori.
Juga, saya mungkin harus menyebutkan bahwa kunci utama dihasilkan oleh database saat menyimpan.
Dengan data saya, saya terkadang mengalami masalah di mana A memiliki sekumpulan objek B yang berbeda, dan objek B ini merujuk ke objek C yang sama.
Ketika saya menelepon session.saveOrUpdate(myAObject)
, saya mendapatkan error hibernasi mengatakan: "a different object with the same identifier value was already associated with the session: C"
. Saya tahu bahwa hibernasi tidak dapat menyisipkan / memperbarui / menghapus objek yang sama dua kali dalam sesi yang sama, tetapi adakah cara untuk mengatasi ini? Ini sepertinya tidak akan menjadi situasi yang tidak biasa.
Selama penelitian saya tentang masalah ini, saya telah melihat orang-orang menyarankan penggunaan session.merge()
, tetapi ketika saya melakukan itu, setiap objek yang "bertentangan" dimasukkan ke dalam database sebagai objek kosong dengan semua nilai disetel ke nol. Jelas bukan itu yang kita inginkan.
[Sunting] Hal lain yang lupa saya sebutkan adalah (karena alasan arsitektur di luar kendali saya), setiap membaca atau menulis perlu dilakukan dalam sesi terpisah.