Aslında bu konfigürasyonda bazı nesnelerim var (gerçek veri modeli biraz daha karmaşıktır):
- A'nın B ile çoka çok ilişkisi vardır (B'nin vardır
inverse="true") - B'nin C ile çoka bir ilişkisi var (ben
cascadeayarladım"save-update") - C, bir tür tip / kategori tablosudur.
Ayrıca, birincil anahtarların kaydetme sırasında veritabanı tarafından oluşturulduğunu muhtemelen belirtmeliyim.
Verilerimle, bazen A'nın bir dizi farklı B nesnesine sahip olduğu ve bu B nesnelerinin aynı C nesnesine başvurduğu problemlerle karşılaşıyorum.
Ben çağırdığınızda session.saveOrUpdate(myAObject), diyordum bir hazırda hatayı alıyor: "a different object with the same identifier value was already associated with the session: C". Hazırda bekletmenin aynı oturumda aynı nesneyi iki kez ekleyemeyeceğini / güncelleyemeyeceğini / silemeyeceğini biliyorum, ancak bunun etrafında bir yol var mı? Bu pek de alışılmadık bir durum gibi görünmüyor.
Bu problemle ilgili araştırmam sırasında, insanların kullanılmasını önerdiklerini gördüm session.merge(), ancak bunu yaptığımda, "çakışan" nesneler, tüm değerleri null olarak ayarlanmış boş nesneler olarak veritabanına eklenir. Açıkçası istediğimiz bu değil.
[Düzenle] Söylemeyi unuttuğum bir diğer şey de (kontrolüm dışındaki mimari nedenlerden dolayı), her okuma veya yazmanın ayrı bir oturumda yapılması gerektiğidir.