हाइबरनेट में कैस्केड और उलटा कैसे उपयोग करें? उन्हें परिभाषित करने के लिए प्रक्रिया/टैग क्या है? क्या वे एक दूसरे से संबंधित हैं और वे कैसे उपयोगी हैं?हाइबरनेट में कैस्केड और उलटा के बीच क्या अंतर है, उनके लिए क्या उपयोग किया जाता है?
उत्तर
के मामले में कई-से-अनेक मध्यस्थ तालिका के माध्यम से संबंध; "कैस्केड" कहता है कि क्या बच्चे की मेज में एक रिकॉर्ड बनाया/अपडेट किया जाएगा। जबकि "उलटा" कहता है कि एक रिकॉर्ड मध्यस्थ तालिका
उदा। नीचे परिदृश्य मान लें 1 छात्र के पास कई फोन हो सकते हैं। तो छात्र वर्ग के फोन के सेट के लिए संपत्ति है। इसके अलावा 1 फोन कई छात्रों के स्वामित्व में हो सकता है। इसलिए फोन क्लास में छात्रों के सेट के लिए संपत्ति है। यह मानचित्रण स्टड_फोन तालिका में उल्लिखित है।
तो तीन टेबल हैं जैसे कि। छात्र, फोन और स्टड_फोन (मध्यस्थ) तालिका। मानचित्रण लग सकता है जैसे:
<set name="phoneset" table="stud_phone" cascade="save-update" inverse="true">
<key column="mapping_stud_id">< /key>
<many-to-many class="com.domain.Phone" column="mapping_phon_id"/>
</set>
एक नया छात्र वस्तु बन जाता है और 2 नए फोन वस्तुओं अपनी सेट करने के लिए जोड़ रहे हैं। और session.save(student_obj)
कहा जाता है। "कैस्केड" और "उलटा" सेटिंग्स के आधार पर विभिन्न प्रश्नों को निकाल दिया जाएगा।
नीचे कैस्केड और उलटा और उनके प्रभाव के विभिन्न संयोजन हैं।
1) CASCADE कोई नहीं और विलोम झूठी
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
2) CASCADE कोई नहीं और विलोम सच है
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
3) CASCADE है है है को बचाने के अद्यतन और विलोम गलत है
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
Hibernate: insert into stud_phone (mapping_stud_id, mapping_phon_id) values (?, ?)
4) कैस्केड बचाओ-अद्यतन और INVERSE सच है
Hibernate: insert into STUDENT (Name, stud_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
Hibernate: insert into phone (phone_num, phone_id) values (?, ?)
जैसा कि देखा जा सकता है, केवल तभी जब कैस्केड बचाया गया था-अपडेट को फोन तालिका में भी बनाया गया था। अन्यथा नहीं।
जब निवेश गलत था (यानी छात्र संबंध का मालिक था) मध्यस्थ तालिका STUD_PHONE अद्यतन किया गया था। जब उलटा सच होता है, फोन रिश्ते का मालिक होता है, भले ही एक नया छात्र बनाया गया हो, मध्यस्थ तालिका अपडेट नहीं की गई थी।
तो दो इकाइयों के संबंध में, "कैस्केड" अन्य इकाई तालिका को प्रभावित करता है और "उलटा" मध्यस्थ तालिका को प्रभावित करता है। तो उनका प्रभाव स्वतंत्र है।
यह उत्तर सबसे अच्छा जवाब के रूप में चिह्नित किया जाना चाहिए। विस्तृत स्पष्टीकरण के लिए +1 –
@ अरुणकुमार – TechSpellBound
के साथ सहमत सबसे अच्छा जवाब। –
सूचना Different between cascade and inverse लिंक से संदर्भित:
1. उलटा: यह किस पक्ष तय करने के लिए प्रयोग किया जाता है रिश्ता मालिक संबंध (डालने या विदेशी कुंजी स्तंभ के अद्यतन) का प्रबंधन करने के लिए है।
2. झरना: झरना में, एक ऑपरेशन (बचाने के लिए, अद्यतन और हटाएं) किया जाता है के बाद, यह तय करेगा कि यह एक और संस्थाओं पर कॉल अन्य कार्यों (, बचाने अद्यतन और हटाएं) करने की जरूरत है कि क्या जो एक दूसरे के साथ संबंध है।
निष्कर्ष: संक्षेप में, "उलटा" पक्ष विदेशी कुंजी अद्यतन करेगा जो है, जबकि "झरना" क्या आपरेशन के द्वारा पालन पर अमल करना चाहिए निर्णय लेता है का फैसला किया। दोनों संबंधों में काफी समान दिखते हैं, लेकिन यह पूरी तरह से दो अलग-अलग चीजें हैं। हाइबरनेट डेवलपर्स पर शोध करने के लिए समय बिताने के लायक हैं, क्योंकि अवधारणा को गलतफहमी करते हुए या इसका दुरुपयोग करने से प्रदर्शन या डेटा अखंडता समस्या में उनके आवेदन को गंभीरता से लाएगी।
इसके अलावा इस मंच विषय की जाँच करें: https://forum.hibernate.org/viewtopic.php?f=1&t=949041
गुगलिंग "हाइबरनेट कैस्केड इनवर्क्स" लाया [यह] (http://www.mkyong.com/hibernate/different-between-cascade-and-inverse/) तीसरे परिणाम के रूप में। –
हमम मुझे नहीं पता था कि आप पहले से ही एक ही लिंक का जिक्र कर रहे थे। – YoK
मैं और @ अरुणकुमार सोचते हैं कि कौशिक लेले का जवाब स्वीकार किए जाने वाले व्यक्ति के रूप में चिह्नित किया जाना चाहिए। – TechSpellBound