इस कॉन्फ़िगरेशन में मेरे पास अनिवार्य रूप से कुछ ऑब्जेक्ट हैं (वास्तविक डेटा मॉडल थोड़ा अधिक जटिल है):
- A का बी (B के साथ कई-कई संबंध हैं
inverse="true"
) - B का C के साथ एक-से-एक संबंध है (मैंने
cascade
निर्धारित किया है"save-update"
) - C एक प्रकार की श्रेणी / श्रेणी तालिका है।
इसके अलावा, मुझे संभवतः उल्लेख करना चाहिए कि डेटाबेस में सेव के द्वारा प्राथमिक कुंजी उत्पन्न होती है।
अपने डेटा के साथ, मैं कभी-कभी उन समस्याओं में भाग लेता हूं जहां ए में अलग-अलग बी ऑब्जेक्ट का एक सेट होता है, और ये बी ऑब्जेक्ट एक ही सी ऑब्जेक्ट को संदर्भित करते हैं।
जब मैं फोन session.saveOrUpdate(myAObject)
, मैं कह रहा एक हाइबरनेट त्रुटि मिलती है: "a different object with the same identifier value was already associated with the session: C"
। मुझे पता है कि हाइबरनेट एक ही सत्र में एक ही वस्तु को दो बार सम्मिलित / अद्यतन / हटा नहीं सकता है, लेकिन क्या इसके आसपास कोई रास्ता है? ऐसा लगता नहीं है कि यह किसी स्थिति के लिए असामान्य होगा।
इस समस्या के अपने शोध के दौरान, मैंने देखा है कि लोग इसका उपयोग करने का सुझाव देते हैं session.merge()
, लेकिन जब मैं ऐसा करता हूं, तो कोई भी "परस्पर विरोधी" वस्तुएं डेटाबेस में सम्मिलित हो जाती हैं, क्योंकि रिक्त मान सभी वस्तुओं के साथ अशक्त हो जाते हैं। स्पष्ट रूप से वह नहीं है जो हम चाहते हैं।
[संपादित करें] एक और बात जिसका मैं उल्लेख करना भूल गया, वह यह है कि (मेरे नियंत्रण से परे वास्तुशिल्प कारणों से), प्रत्येक पढ़ने या लिखने के लिए एक अलग सत्र में किया जाना चाहिए।