2012-05-08 10 views
5

मेरे पास एक ऐसा एप्लिकेशन है जो हाइबरनेट के माध्यम से ऑब्जेक्ट लोड करता है और फिर उन वस्तुओं को अलग-अलग ऑब्जेक्ट्स के रूप में अलग-अलग ऑब्जेक्ट्स में पास करता है। उन वस्तुओं में किए गए किसी भी बदलाव को हाइबरनेट स्तरीय पर वापस भेज दिया जाता है जहां मैं उन वस्तुओं पर saveOrUpdate() पर कॉल करता हूं।क्या Hibernate saveOrUpdate विधि बच्चों को हटा देगा?

saveOrUpdate() में भेजे गए ऑब्जेक्ट्स में संग्रह में निहित एक-से-कई रिलेशनशिप बाल ऑब्जेक्ट्स को हाइबरनेट करेगा यदि मैं saveOrUpdate() पर कॉल करने से पहले संग्रह से बच्चे ऑब्जेक्ट को हटा देता हूं?

यदि नहीं, तो यह आमतौर पर पृथक वस्तुओं का उपयोग करने वाले हाइबरनेट एप्लिकेशन में कैसे पूरा किया जाएगा?

उत्तर

5

हाइबरनेट को नष्ट करेगा एक-से-अनेक संबंध बच्चे वस्तुओं वस्तुओं कि saveOrUpdate() में पारित कर रहे हैं, तो मैं बस saveOrUpdate() कॉल करने से पहले संग्रह से बच्चे वस्तु को निकालने में एक संग्रह में निहित?

नहीं, डिफ़ॉल्ट रूप से नहीं। इस संदर्भ में इस तरह की बाल वस्तुओं को "अनाथ" के रूप में जाना जाता है, यह मानते हुए कि कुछ अन्य इकाई का भी संदर्भ नहीं है।

यह डॉक्स में चर्चा की है, 11.11. Transitive persistence:

एक विशेष झरना शैली, delete-orphan, एक-से-कई संगठनों पर लागू होता है, और पता चलता है कि delete() आपरेशन किसी भी बच्चे को वस्तु के लिए लागू किया जाना चाहिए कि एसोसिएशन से हटा दिया गया है। एनोटेशन का उपयोग करने के लिए CascadeType.DELETE-ORPHAN समकक्ष नहीं है। इसके बजाय आप उदाहरण 11.4, "@OneToManyorphanRemoval के साथ" के रूप में विशेषता अनाथ रिमूवल का उपयोग कर सकते हैं। यदि किसी इकाई को @OneToMany संग्रह से हटा दिया गया है या किसी संबंधित इकाई को @OneToOne एसोसिएशन से हटा दिया गया है, तो orphanRemoval को पर सेट किया गया है, तो इस संबद्ध इकाई को हटाने के लिए चिह्नित किया जा सकता है।

+0

यह समझ में आता है। हालांकि, जब मैं संग्रह पर CascadeType.ALL, orphanRemoval = सत्य सेट करता हूं तो बच्चे ऑब्जेक्ट अभी भी हटा नहीं जाता है। क्या यह इस तथ्य के कारण हो सकता है कि मैं OneToMany एनोटेशन के साथ संयोजन में जॉइन कॉलम एनोटेशन का उपयोग कर रहा हूं? – Tom

+0

@ टॉम: शायद नहीं, नहीं, '@ JoinColumn' का उपयोग डिफ़ॉल्ट रूप से कॉलम नाम को ओवरराइड करने के लिए किया जाता है। ऐसा लगता है कि हाइबरनेट ऐसा नहीं लगता कि यह अनाथ है। क्या आप सुनिश्चित हैं कि किसी अन्य इकाई के पास उस बच्चे का संदर्भ नहीं है? – skaffman

+0

यह निश्चित रूप से किसी अन्य इकाई से संदर्भित नहीं है। अंतर्निहित डीबी रिश्ते वास्तव में एक बहुत से लोगों के लिए है, हालांकि, मैं मॉडल को सरल बनाने के लिए JoinColumn के साथ OneToMany का उपयोग कर रहा हूं। शायद यह फेंक रहा है? अन्यथा मैंने यह भी ध्यान दिया कि बच्चे की कुछ बच्चों की संस्थाओं में बहुत से संबंध हैं जिनमें अनाथ रिमूवल विशेषता सेट नहीं हो सकती है। शायद यह किसी भी तरह माता-पिता को हटाने से रोक रहा है। – Tom

0

डिफ़ॉल्ट रूप से, यह नहीं होगा। आप इसे प्राप्त करने के लिए @Cascade (CascadeType.DELETE_ORPHANS) का उपयोग कर सकते हैं।

संबंधित मुद्दे