CodeGym/Java Course/All lectures for HI purposes/हाइबरनेट में किसी वस्तु को कैसे बदलें

हाइबरनेट में किसी वस्तु को कैसे बदलें

उपलब्ध

मर्ज () विधि की बारीकियां

यदि आप हाइबरनेट का उपयोग किसी ऐसे ऑब्जेक्ट को बदलने के लिए करना चाहते हैं जो पहले से ही डेटाबेस में संग्रहीत है, तो इसके लिए भी कई तरीके हैं।

पहला मर्ज () विधि है , जो पास की गई वस्तु के आधार पर डेटाबेस में जानकारी को अपडेट करता है । यह SQL अद्यतन क्वेरी का आह्वान करेगा। उदाहरण:

User user = new User();
user.setName("Kolyan");
session.save(user);

session.evict(user);     // detach the object from the session
user.setName("Masha");

User user2 = (User) session.merge(user);

यहाँ कई महत्वपूर्ण बारीकियाँ हैं।

सबसे पहले, मर्ज () विधि परिणाम, अद्यतन वस्तु लौटाती है। इस ऑब्जेक्ट में एक पर्सिस्ट स्टेट है और यह सेशन ऑब्जेक्ट से जुड़ा हुआ है। मर्ज () विधि को दी गई वस्तु नहीं बदलती है।

ऐसा लग सकता है कि उपयोगकर्ता और उपयोगकर्ता 2 के बीच कोई अंतर नहीं है, लेकिन ऐसा नहीं है। आप POJO ऑब्जेक्ट को मर्ज () विधि में पास कर सकते हैं, और परिणामस्वरूप, विधि एक प्रॉक्सी (हाइबरनेट सेटिंग्स के आधार पर) वापस कर सकती है। तो बस याद रखें कि मर्ज () विधि पास की गई वस्तु को नहीं बदलती है।

दूसरी बात, यदि मर्ज करने के लिए पास की गई वस्तु () में क्षणिक स्थिति है (और इसमें कोई आईडी नहीं है), तो डेटाबेस में इसके लिए एक अलग लाइन बनाई जाएगी। दूसरे शब्दों में, पर्सिस्ट () कमांड को निष्पादित किया जाएगा ।

तीसरा, यदि कोई वस्तु पहले से ही सत्र से जुड़ी हुई है (पर्सिस्ट स्थिति के साथ) मर्ज () विधि में पास की जाती है, तो कुछ नहीं होगा - विधि बस उसी वस्तु को वापस कर देगी। क्यों? और सभी क्योंकि जब लेन-देन किया जाता है, तो डेटा वैसे भी डेटाबेस में लिखा जाएगा:

User user = new User();
user.setName("Kolyan");
session.save(user);

user.setName("Masha"); //change the object attached to the session

session.close();  //all changed objects will be written to the database

किसी भी बदलाव के बाद हर बार ऑब्जेक्ट को सेव करने की जरूरत नहीं है। यदि यह वस्तु स्थायी स्थिति में है, तो हाइबरनेट स्वयं ही सब कुछ कर लेगा। यदि आप "आधार से जुड़ी" वस्तु को बदलते हैं, तो उसके सभी परिवर्तन आधार पर लिखे जाएंगे।

अद्यतन () विधि की बारीकियाँ

हाइबरनेट में एक अपडेट () विधि भी है , जो कि सेव () विधि की तरह , पिछले संस्करणों से विरासत में मिली है। इस पद्धति से, आप केवल पहले से सहेजे गए ऑब्जेक्ट का डेटा अपडेट कर सकते हैं। यह SQL अद्यतन क्वेरी का आह्वान करेगा। उदाहरण:

User user = new User();
user.setName("Kolyan");
session.save(user);

session.evict(user);     // detach the object from the session
user.setName("Masha");

session.update(user);

यह विधि कुछ भी वापस नहीं करती है और मौजूदा वस्तु को नहीं बदलती है।

यदि आप इस विधि को किसी नई वस्तु पर कॉल करते हैं, तो एक अपवाद केवल फेंक दिया जाएगा:

User user = new User();
user.setName("Kolyan");
session.update(user);   //an exception will be thrown here

सेवऑरअपडेट () विधि

जेपीए के आगमन से पहले, लगातार () विधि का कार्य saveOrUpdate () विधि द्वारा किया जाता था । उनका कार्य डेटाबेस में मौजूदा वस्तु पर जानकारी को अद्यतन करना था, और यदि कोई नहीं है, तो इसे बनाएं। यह लगभग हमेशा सेव () और अपडेट () विधियों के स्थान पर उपयोग किया जाता है ।

अद्यतन () विधि के विपरीत , यह पास की गई वस्तु को बदल सकता है। उदाहरण के लिए, इसे उस आईडी पर सेट करें जिसे डेटाबेस में सहेजते समय असाइन किया गया था। उदाहरण:

User user = new User();
user.setName("Kolyan");
session.saveOrUpdate(user);   //object will be written to the database

यह काम किस प्रकार करता है:

  • यदि पास की गई वस्तु में एक आईडी है, तो अद्यतन SQL विधि को कहा जाता है
  • यदि पास की गई वस्तु की आईडी सेट नहीं है, तो INSERT SQL विधि कहलाती है
टिप्पणियां
  • लोकप्रिय
  • नया
  • पुराना
टिप्पणी लिखने के लिए आपको साइन इन करना होगा
इस पेज पर अभी तक कोई टिप्पणियां नहीं हैं