हाइबरनेट में अलग, लगातार और क्षणिक वस्तुएं क्या हैं? कृपया एक उदाहरण के साथ समझाएं।
हाइबरनेट में अलग, लगातार और क्षणिक वस्तुएं क्या हैं? कृपया एक उदाहरण के साथ समझाएं।
जवाबों:
एक new
निरंतर वर्ग का एक उदाहरण जो किसी के साथ जुड़ा नहीं है Session
, डेटाबेस में कोई प्रतिनिधित्व नहीं है और कोई पहचानकर्ता मूल्य हाइबरनेट द्वारा क्षणिक नहीं माना जाता है :
Person person = new Person();
person.setName("Foobar");
// person is in a transient state
एक सतत उदाहरण डेटाबेस में एक पहचानकर्ता, एक पहचानकर्ता मूल्य है और एक के साथ जुड़ा हुआ है Session
। तुम एक क्षणिक उदाहरण बना सकते हैं लगातार एक के साथ संबद्ध द्वारा Session
:
Long id = (Long) session.save(person);
// person is now in a persistent state
अब, यदि हम close
हाइबरनेट करते हैं Session
, तो निरंतर उदाहरण एक अलग उदाहरण बन जाएगा : यह Session
अब और संलग्न नहीं है (लेकिन फिर भी संशोधित किया जा सकता है और एक नए Session
बाद में फिर से जोड़ा जा सकता है )।
यह सब स्पष्ट रूप से पूरे अध्याय 10 में स्पष्ट किया गया है । हाइबरनेट प्रलेखन की वस्तुओं के साथ काम करना जो मैं केवल ऊपर पैराफ्रासिंग कर रहा हूं। निश्चित रूप से, अवश्य पढ़ें।
A persistent instance has a representation in the database
एक निरंतर इकाई को बचाने के संचालन से पहले डेटाबेस में एक प्रतिनिधित्व नहीं है।
सीतनिद्रा में वस्तु के निम्नलिखित राज्य हैं:
क्षणिक - नए संचालक के उपयोग से तात्कालिक वस्तुओं को क्षणिक वस्तु कहा जाता है।
एक वस्तु क्षणिक होती है अगर उसे नए ऑपरेटर का उपयोग करके तत्काल किया गया हो, और वह हाइबरनेट सत्र से संबद्ध न हो। डेटाबेस में इसका कोई निरंतर प्रतिनिधित्व नहीं है और कोई पहचानकर्ता मान असाइन नहीं किया गया है। यदि कोई संदर्भ अब तक नहीं होता है, तो कचरा संग्रहकर्ता द्वारा क्षणिक घटनाओं को नष्ट कर दिया जाएगा।
स्थायी - एक वस्तु जिसमें डेटाबेस की पहचान होती है, उसे एक स्थायी वस्तु कहा जाता है।
एक सतत उदाहरण डेटाबेस में एक प्रतिनिधित्व और एक पहचानकर्ता मूल्य है। यह सिर्फ बचाया या लोड किया गया हो सकता है; हालाँकि, यह एक सत्र के दायरे में है। हाइबरनेट लगातार स्थिति में किसी वस्तु में किए गए परिवर्तनों का पता लगाएगा और कार्य की इकाई के पूरा होने पर डेटाबेस के साथ राज्य को सिंक्रनाइज़ करेगा।
अलग किया गया - एक अलग उदाहरण एक ऐसी वस्तु है जो लगातार बनी रही है, लेकिन इसका सत्र बंद कर दिया गया है।
एक अलग किए गए उदाहरण को बाद के समय में एक नए सत्र में फिर से सेट किया जा सकता है, जिससे यह फिर से लगातार बना रहे। यह सुविधा काम के लंबे समय तक चलने वाली इकाइयों के लिए एक प्रोग्रामिंग मॉडल को सक्षम करती है जिसके लिए उपयोगकर्ता के थिंक-टाइम की आवश्यकता होती है। हम उन्हें उपयोगकर्ता के दृष्टिकोण से आवेदन लेनदेन, अर्थात, कार्य की एक इकाई कहते हैं।
http://webiwip.com/interview-questions-answers/hibernate-interview-questions/32012
मुझे गारबेज कलेक्टर के दृष्टिकोण से भी समझाते हैं।
हाइबरनेट के 3 ऑब्जेक्ट स्टेट्स हैं (या) हाइबरनेट के ऑब्जेक्ट स्कोप-
एक कोड उदाहरण के साथ समझना बेहतर है-
आइए हम एक POJO वर्ग को स्टूडेंट ऑब्जेक्ट-> मानते हैं
Student student = new Student();
अब, यह छात्र वस्तु क्षणिक स्थिति में है ।
जब हम इस POJO ऑब्जेक्ट को हाइबरनेट सत्र-> से जोड़ते हैं
session.save(student);
अब यह POJO ऑब्जेक्ट लगातार स्थिति में है ।
(कचरा संग्रहकर्ता बिंदु- GC किसी भी वस्तु को मिटा नहीं सकता है, जो लगातार स्थिति में है। इसलिए हम कह सकते हैं कि लगातार स्थिति POJO वस्तुओं के लिए अस्थायी भंडारण की तरह है )
अगर हम प्रदर्शन करते हैं->
session.beginTransaction.commit();
उसके बाद POJO ऑब्जेक्ट स्थायी या डेटाबेस संग्रहण स्थिति पर है
(कचरा संग्रहकर्ता बिंदु- GC इस ऑब्जेक्ट को मिटा नहीं सकता क्योंकि यह POJO ऑब्जेक्ट अब JVM के दायरे से बाहर है और एक डेटाबेस के अंदर फॉर्म टेबल में संग्रहीत है। हम कह सकते हैं कि यह डेटाबेस संग्रहण स्थिति POOO के लिए स्थायी संग्रहण की तरह है वस्तुएं )
अगर हम प्रदर्शन करते हैं->
session.evict(student);
तो POJO वस्तु बेदखल कर रहा है या अलग state.Soo को लगातार राज्य से हटा वापस POJO वस्तु के इस राज्य है राज्य अलग ।
(कचरा संग्रहकर्ता बिंदु- जीसीवीवी से अलग किए गए पीओजेओ ऑब्जेक्ट को जीसी आसानी से मिटा सकता है)
निम्नलिखित इकाई को देखते हुए:
@Entity
public class City {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
// other fields and methods.
}
से हाइबरनेट 5.2 प्रलेखन (मैं भी शामिल किया है removed
स्थिति):
क्षणिक
इकाई सिर्फ तात्कालिक है और एक दृढ़ता के संदर्भ से जुड़ी नहीं है। डेटाबेस में इसका कोई निरंतर प्रतिनिधित्व नहीं है और आम तौर पर कोई पहचानकर्ता मान असाइन नहीं किया गया है (जब तक कि निर्दिष्ट जनरेटर का उपयोग नहीं किया गया था)।
City city = new City();
प्रबंधित, या लगातार
इकाई में एक संबद्ध पहचानकर्ता होता है और वह दृढ़ता के संदर्भ में जुड़ा होता है। यह डेटाबेस में अभी तक भौतिक रूप से मौजूद हो भी सकता है और नहीं भी।
// city will be in a managed/persistent state and any changes to it, will be tracked by hibernate
// and reflected to the database when the persistence context is flushed.
session.save(city);
जुदा जुदा
इकाई के पास एक संबद्ध पहचानकर्ता है, लेकिन वह दृढ़ता के संदर्भ से संबद्ध नहीं है (आमतौर पर क्योंकि दृढ़ता संदर्भ बंद था या उदाहरण संदर्भ से निकाला गया था)
// city is in a detached state, Hibernate is no longer aware of the entity
session.evict(city)
हटा दिया
इकाई में एक संबद्ध पहचानकर्ता होता है और वह दृढ़ता के संदर्भ में जुड़ा होता है, हालांकि इसे डेटाबेस से हटाने के लिए निर्धारित किया जाता है।
session.remove(city);
नोट:
हाइबरनेट एपीआई इकाई राज्यों के बीच स्विच करने के तरीकों के जोड़े प्रदान करता है, और मुझे लगता है कि यह हाइबरनेट सत्र वर्ग की खोज करने लायक है ।
सही उत्तर के साथ पहले से ही पहचाने गए निरंतर, क्षणिक, अलग किए गए शब्द हाइबरनेट में सिर्फ वस्तु की स्थिति है।
अधिक सटीक होने के लिए, ये तीन राज्य वास्तव में हाइबरनेट ऑब्जेक्ट परिवर्तन और सत्र जीवन चक्र की स्थिति दिखाते हैं