मर्ज() पद्धतीचे बारकावे

डेटाबेसमध्ये आधीच संग्रहित केलेली एखादी वस्तू बदलण्यासाठी तुम्हाला हायबरनेट वापरायचे असल्यास, यासाठी अनेक पद्धती देखील आहेत.

पहिली merge() पद्धत आहे , जी पास केलेल्या ऑब्जेक्टवर आधारित डेटाबेसमधील माहिती अपडेट करते . हे SQL UPDATE क्वेरीला विनंती करेल. उदाहरण:

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);

येथे अनेक महत्त्वपूर्ण बारकावे आहेत.

प्रथम, विलीन () पद्धत परिणाम, अद्यतनित ऑब्जेक्ट परत करते. या ऑब्जेक्टमध्ये पर्सिस्ट स्थिती आहे आणि ती सेशन ऑब्जेक्टशी संलग्न आहे. merge() पद्धतीत पास केलेला ऑब्जेक्ट बदलत नाही.

असे दिसते की वापरकर्ता आणि वापरकर्ता 2 मध्ये फरक नाही, परंतु तसे नाही. तुम्ही POJO ऑब्जेक्ट merge() पद्धतीमध्ये पास करू शकता आणि परिणामी, पद्धत प्रॉक्सी परत करू शकते (हायबरनेट सेटिंग्जवर अवलंबून). म्हणून फक्त लक्षात ठेवा की merge() पद्धत पास केलेले ऑब्जेक्ट बदलत नाही.

दुसरे म्हणजे, विलीनीकरणासाठी पास केलेल्या ऑब्जेक्टची क्षणिक स्थिती असल्यास (आणि त्याला आयडी नाही), तर डेटाबेसमध्ये त्याच्यासाठी एक वेगळी ओळ तयार केली जाईल. दुसऱ्या शब्दांत, persist() कमांड कार्यान्वित होईल .

तिसरे म्हणजे, जर सेशनशी आधीच जोडलेली एखादी वस्तू (पर्सिस्ट स्थितीसह) विलीन () मेथडमध्ये पास केली गेली, तर काहीही होणार नाही - पद्धत फक्त समान ऑब्जेक्ट परत करेल. का? आणि सर्व कारण जेव्हा व्यवहार केला जातो, तेव्हा डेटा डेटाबेसमध्ये कसाही लिहिला जाईल:

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

वस्तू प्रत्येक वेळी बदलल्यानंतर जतन करण्याची गरज नाही. जर हा ऑब्जेक्ट पर्सिस्ट स्थितीत असेल, तर हायबरनेट सर्वकाही स्वतः करेल. जर तुम्ही "बेसशी संलग्न" असलेली एखादी वस्तू बदलली तर त्याचे सर्व बदल बेसवर लिहिले जातील.

अपडेट() पद्धतीचे बारकावे

हायबरनेटमध्ये अपडेट() पद्धत देखील आहे , जी save() पद्धतीप्रमाणेच , मागील आवृत्त्यांकडून वारसाहक्काने मिळाली होती. या पद्धतीसह, आपण केवळ आधीपासून जतन केलेल्या ऑब्जेक्टचा डेटा अद्यतनित करू शकता. हे SQL UPDATE क्वेरीला विनंती करेल. उदाहरण:

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() पद्धत

JPA च्या आगमनापूर्वी, persist() पद्धतीचे कार्य saveOrUpdate() पद्धतीद्वारे केले जात असे . डेटाबेसमधील विद्यमान ऑब्जेक्टवरील माहिती अद्यतनित करणे आणि जर तेथे काहीही नसेल तर ते तयार करणे हे त्याचे कार्य होते. हे जवळजवळ नेहमीच save() आणि update() पद्धतींच्या जागी वापरले जाते .

update() पद्धतीच्या विपरीत , ते त्यास दिलेले ऑब्जेक्ट बदलू शकते. उदाहरणार्थ, डेटाबेसमध्ये सेव्ह करताना नियुक्त केलेल्या आयडीवर सेट करा. उदाहरण:

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

हे कसे कार्य करते:

  • पास केलेल्या ऑब्जेक्टला आयडी असल्यास, UPDATE SQL पद्धत म्हणतात
  • पास केलेल्या ऑब्जेक्टचा आयडी सेट केलेला नसल्यास, INSERT SQL पद्धत म्हणतात