हठ प्रसंग क्या है?


109

मैं जावा दुनिया और जेपीए के लिए नया हूं। मैं जेपीए का अध्ययन कर रहा था और संपूर्णता, दृढ़ता जैसी कई नई शर्तों पर आया था। पढ़ते समय, मैं दृढ़ता प्रसंग की सटीक परिभाषा नहीं समझ सका ।

क्या कोई इसे सरल शब्दों में समझा सकता है? इसमें उपयोग किए गए डेटा के साथ क्या करना है @Entity?

उदाहरण के लिए, मुझे यह परिभाषा समझने में बहुत जटिल लगती है:

एक दृढ़ता संदर्भ ऐसी संस्थाओं का एक समूह है जो किसी भी निरंतर पहचान के लिए एक अद्वितीय इकाई उदाहरण है।

जवाबों:


86

एक दृढ़ता संदर्भ उन संस्थाओं के एक समूह को संभालता है जो डेटा को कुछ दृढ़ता स्टोर (जैसे एक डेटाबेस) में बनाए रखने के लिए धारण करते हैं। विशेष रूप से, संदर्भ अलग-अलग राज्यों से अवगत है, एक इकाई (जैसे प्रबंधित, अलग) दोनों संदर्भ और अंतर्निहित दृढ़ता स्टोर के संबंध में हो सकती है।

यद्यपि हाइबरनेट-संबंधी (एक JPA प्रदाता), मुझे लगता है कि ये लिंक उपयोगी हैं:

http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch03.html

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/architecture.html

जावा ईई में, एक दृढ़ता संदर्भ को आमतौर पर एक एंटिटी मैनजर के माध्यम से एक्सेस किया जाता है।

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html

विभिन्न राज्यों में एक इकाई हो सकती है और इनमें से संक्रमण नीचे वर्णित हैं:

http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html

http://gerrydevstory.com/wp-content/uploads/2012/05/jpa-state-transtition.png


हम्म, यह अब समझ में आता है। क्या आपके पास एक समान "सरल" परिभाषा है जो कंटेनर-प्रबंधित और अनुप्रयोग-प्रबंधित एंटिटी प्रबंधकों के बीच अंतर बताती है?
अमृत

4
कंटेनर बनाम एप्लिकेशन बस मूल रूप से बताता है कि एंटिटी मैनेजर कहां बनाया गया है - एक कंटेनर में, या अंदर, आवेदन में।
उरोन

66
  1. संस्थाओं को javax.persistence.EntityManager द्वारा प्रबंधित किया जाता है उदाहरण दृढ़ता का उपयोग करते हुए।
  2. प्रत्येक EntityManager उदाहरण एक दृढ़ता संदर्भ के साथ जुड़ा हुआ है
  3. भीतर दृढ़ता संदर्भ , इकाई उदाहरणों और उनके जीवन चक्र में कामयाब रहे हैं।
  4. दृढ़ता का संदर्भ एक गुंजाइश को परिभाषित करता है जिसके तहत विशेष इकाई उदाहरण बनाए जाते हैं, बनाए जाते हैं, और हटा दिए जाते हैं।
  5. एक दृढ़ता संदर्भ एक कैश की तरह होता है जिसमें निरंतर संस्थाओं का एक सेट होता है , इसलिए एक बार लेन-देन समाप्त हो जाने के बाद , सभी निरंतर वस्तुओं को एंटिटीमैनगर के दृढ़ता के संदर्भ से अलग कर दिया जाता है और अब प्रबंधित नहीं किया जाता है।

1
मैंने पाया कि एक लेन-देन समाप्त होने के बाद एक्लिप्सिंक संस्थाओं को अलग नहीं करता है ...
रे हुल्हा

कंटेनर प्रबंधित दृढ़ता संदर्भ का कैश केवल लेनदेन की अवधि के लिए रहेगा। लेन-देन में पढ़ी गई इकाइयां लेनदेन के पूरा होने के बाद अलग हो जाएंगी और बाद में लेनदेन में संपादित किए जाने की आवश्यकता होगी। एक्लिप्सलिंक । @ राययल्हा
प्रीतम कुमार

4
@pritamkumar, आपने दृढ़ता प्रसंग की अवधारणा को अच्छी तरह समझाया। मैं सिर्फ इतना जोड़ता हूं कि इसमें javax.persistence.PersistenceContext एनोटेशन भी है, जिसका उपयोग एंटिटी मैनजर ऑब्जेक्ट को इंजेक्ट करने के लिए और इंजेक्ट ऑब्जेक्ट (जैसे, एक ट्रांजेक्शन) के दायरे को स्थापित करने के लिए किया जाता है।
पॉलो मर्सन

30

इस पृष्ठ से लिया गया :

यहाँ जेपीए दुनिया का एक त्वरित धोखा पत्र है:

  • एक कैश डेटा की एक प्रति है, जिसका अर्थ है कि डेटाबेस से बाहर रहते हुए खींचा गया है।
  • एक कैश फ्लशिंग डेटाबेस में वापस संशोधित डेटा डालने का कार्य है।
  • एक PersistenceContext अनिवार्य रूप से एक कैश है। यह अपने स्वयं के गैर-साझा डेटाबेस कनेक्शन के लिए भी जाता है।
  • एक EntityManager एक PersistenceContext (और इसलिए एक कैश) का प्रतिनिधित्व करता है
  • एक EntityManagerFactory एक EntityManager बनाता है (और इसलिए एक PersonenceContext / Cache)

क्या कोई PersisnteceContext का कोई EntityManager उदाहरण हो सकता है? और क्या किसी एंटिटी मैनेजर के पास कोई PersistenceContext हो सकता है? PersisntenceContext सभी एप्लिकेशन के लिए केवल एक है?
रॉबर्टो

7

एक स्थायी संदर्भ उन संस्थाओं का प्रतिनिधित्व करता है जो डेटा को धारण करते हैं और योग्य होते हैं जो डेटाबेस की तरह कुछ निरंतर भंडारण में बने रहते हैं। एक बार जब हम commitएक सत्र के तहत लेन-देन करते हैं, जिसमें ये इकाइयां संलग्न होती हैं, तो हाइबरनेट लगातार संदर्भ को फ्लश करता है और उन पर परिवर्तन ( डालें / सहेजें, अपडेट या हटाएं ) लगातार भंडारण में बने रहते हैं।


7

org.hibernate.Sessionएपीआई और javax.persistence.EntityManagerएपीआई दोनों लगातार डेटा से निपटने के लिए एक संदर्भ का प्रतिनिधित्व करते हैं।

इस अवधारणा को दृढ़ता संदर्भ कहा जाता है । स्थायी डेटा में एक दृढ़ता संदर्भ और अंतर्निहित डेटाबेस दोनों के संबंध में एक स्थिति है।


5

"एक निश्चित समय में एक इकाई प्रबंधक उदाहरण द्वारा प्रबंधित जारी-सक्षम (इकाई) उदाहरणों का एक सेट" दृढ़ता संदर्भ कहा जाता है।

जेपीए @Entity एनोटेशन एक निरंतर सक्षम इकाई को इंगित करता है।

यहां जेपीए की परिभाषा देखें


4

आम शब्दों में हम कह सकते हैं कि Persistence Context एक ऐसा वातावरण है जहाँ इकाइयाँ प्रबंधित की जाती हैं, अर्थात यह डेटाबेस के साथ "Entity" को सिंक करता है।


3

जबकि @pritam kumar एक अच्छा ओवरव्यू देता है 5 वीं बात सच नहीं है।

हठ प्रसंग या तो ट्रांज़ैक्शन स्कोप हो सकता है - लेन-देन की लंबाई के लिए हठ प्रसंग 'जीवन', या विस्तारित - हठ प्रसंग कई लेनदेन का विस्तार करता है।

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

जेपीए का एंटिटीमैनगर और हाइबरनेट का सत्र एक विस्तारित दृढ़ता संदर्भ प्रदान करता है।


हाय user2771889, आप सही हैं मैंने दृढ़ता प्रसंग के विस्तारित दायरे का उल्लेख नहीं किया है। 5 वां बिंदु सिर्फ लेन-देन से संबंधित दृढ़ता का संदर्भ था।
प्रीतम कुमार

2

दृढ़ता संदर्भ एक ऐसा वातावरण या कैश है जहां इकाई उदाहरण (जो डेटा को धारण करने में सक्षम होते हैं और जिससे डेटाबेस में बने रहने की क्षमता होती है) का प्रबंधन इकाई प्रबंधक द्वारा किया जाता है । यह इकाई को डेटाबेस के साथ सम्‍मिलित करता है। एनोटेशन सक्षम होता है। कायम रहना। @ एंटिटी कुछ भी नहीं है, लेकिन एक वर्ग है जो डेटाबेस के साथ संचार करने के लिए ऑब्जेक्ट बनाने में हमारी मदद करता है। और जिस तरह से ऑब्जेक्ट्स संचार कर रहा है वह विधियों का उपयोग कर रहा है। और जो उन तरीकों की आपूर्ति करता है वह एंटिटी मैनेजर है।


1
यह उत्तर मौजूदा उत्तरों से कैसे भिन्न है?
अकिन ओकेबगिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.