2012-05-16 6 views
5

मैं वसंत 3.0.6, जेपीए 2.0, हाइबरनेट 3.6.8 का उपयोग कर रहा हूं। मेरा सवाल यह है कि, एंटाइट क्लास के लिए "प्रॉक्सी" बनाने के लिए किस स्थिति में जावासवादी होता है? और इस प्रॉक्सी का कारण क्या है? मैं निम्नलिखित इकाई है:संस्थाएं-कक्षाएं कब बढ़ी हैं और किसके लिए? जेपीए, वसंत, हाइबरनेट, जावासिस्ट

@Entity 
public MyEntity{ 
.. 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "adresseID") 
    private Adresse adresse; 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "myEntity") 
    private List<Parameter> parameters; 

.. 
} 

जब मैं db से एक MyEntity लोड, संस्था के वर्ग MyEntity __ $$ _ javassist की तरह कुछ है। ऐसा क्यों किया जाता है? किस लिए? मुझे लगता है कि यहां नियमित कक्षा MyEntity का उपयोग किया जा सकता है।

आलसी लोड हो रहा है लागू करने के लिए, हम कर सकते हैं:

    के लिए @OneToMany
  • - PersistenceBag यहां इस्तेमाल किया जा सकता
  • @ManyToOne के लिए
  • - यहाँ इस्तेमाल किया जाना चाहिए "enchancedClass" Adress_ तरह $$ _javassist

तो मायनेटीटी को बढ़ाने के लिए क्या कारण है? मैं इसके बारे में कुछ और कहां पढ़ सकता हूं? आप किस पुस्तक/लेख/ब्लॉग की सिफारिश कर सकते हैं?

उत्तर

4

इकाई वर्गों को बढ़ाए जाने का प्राथमिक कारण यह है कि जेपीए (या हाइबरनेट) को इकाई वस्तुओं की स्थिति को ट्रैक करने की आवश्यकता होती है।

विशेष रूप से जेपीए को अवगत होना चाहिए यदि दिया गया इकाई क्षेत्र "गंदे" है - इसे उपयोगकर्ता द्वारा संशोधित किया गया था, लेकिन यह परिवर्तन अभी तक डेटाबेस में दिखाई नहीं दे रहा है, इसलिए लेनदेन के दौरान जेपीए को डेटाबेस के साथ सिंक्रनाइज़ करना होगा।

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

हाइबरनेट का डिफ़ॉल्ट रनटाइम बढ़ाने का उपयोग करना है - प्रॉक्सी अतिरिक्त सामग्री के साथ इकाई का केवल एक उप-वर्ग है।

कुछ सामान्य विचार here रेखांकित हैं।

संबंधित मुद्दे