2012-01-20 19 views
5

शून्य पर मैं जेपीए के साथ सीतनिद्रा में होना और एक रिश्ता है कि इस तरह दिखता है उपयोग कर रहा हूँ:जेपीए/हाइबरनेट वास्तविक वस्तु डेटा फ़ेच नहीं प्रॉक्सी, सभी गुण सेट

public class PencilImpl implements Pencil { 

    @ManyToOne(targetEntity = PersonImpl.class, fetch = FetchType.LAZY) 
    @JoinColumn(name = "owner", nullable = false) 
    private Person owner; 

    ... 

    @Override 
    public final Person getOwner() { 
     return owner; 
    } 
} 

के बाद से मैं आलसी लाने प्रकार का उपयोग शुरू कर दिया, हर बार जब मैं एक पेंसिल के मालिक (पेंसिल.getOwner) प्राप्त करने का प्रयास करता हूं) मुझे एक गैर-शून्य वस्तु मिलती है जिसमें इसकी सभी आंतरिक गुण शून्य हो जाती हैं।

मुझे लगता है कि हाइबरनेट द्वारा बनाई गई प्रॉक्सी डेटाबेस से असली ऑब्जेक्ट नहीं ले रही है जब इसे करना चाहिए।

कोई विचार? धन्यवाद :)

+4

क्या आप गेटर्स को बुला रहे हैं और शून्य हो रहे हैं? या आप किसी डीबगर में ऑब्जेक्ट का निरीक्षण कर रहे हैं? यदि पूर्व है, तो अपने गेटर्स पर अंतिम संशोधक को हटाने का प्रयास करें। यदि उत्तरार्द्ध, वास्तव में गेटर्स को कॉल करने का प्रयास करें। –

+0

यह भी देखें http://blog.bolkey.com/2009/05/hibernate-datanucleus-r1/ – DataNucleus

उत्तर

2

के रूप में जेबी Nizet सुझाव कन्वर्ट करने के लिए है, प्रॉक्सी के साथ हाइबरनेट अंतिम मेरी कक्षाओं 'ही टिककर खेल में संशोधक खिलवाड़ किया गया था आलसी लोड रिश्तों के लिए बनाता है।

5

यह केवल हाइबरनेट आलसी लोडिंग को लागू करता है। यह आपको आपकी इकाई वर्ग के उदाहरण के बजाय प्रॉक्सी ऑब्जेक्ट देगा। जब आप कहते हैं कि

एक गैर-शून्य उद्देश्य यह है कि यह सभी, सही भीतरी गुण

शून्य पर कि शायद है क्या आप एक डिबगर में देखा था सेट किया गया है? आपको इसके बारे में चिंता करने की ज़रूरत नहीं है, एक बार जब आप कोड के माध्यम से या डीबगर के अंदर कॉल के माध्यम से उन गुणों में से किसी एक तक पहुंच सकते हैं, तो हाइबरनेट पृष्ठभूमि में डीबी से डेटा लोड करेगा, आपकी इकाई वर्ग का एक उदाहरण और सभी कॉल प्रॉक्सी ऑब्जेक्ट को वास्तविक इकाई को पारदर्शी रूप से सौंप दिया जाएगा। तो सामान्य रूप से, और आदर्श रूप से आपको भेदभाव हाइबरनेट प्रॉक्सी < -> इकाई ऑब्जेक्ट के बारे में परवाह नहीं है।

मैं दो कारणों के बारे में सोच सकते हैं कि गौरव वैसे भी के बारे में पता होना करने के लिए:

  1. प्रदर्शन: जब आप एक पाश में एक lazily लोड संग्रह के तत्वों का उपयोग, आलसी लोड हो रहा है वास्तव में अपने अनुप्रयोग धीमा कर सकते हैं
  2. विरासत: यदि आपका डेटा मॉडल विरासत का उपयोग करता है, तो instanceof और बहुत से सावधान रहें। पढ़ें कैसे परीक्षण करने के लिए पर this SO question यदि एक वस्तु एक हाइबरनेट प्रॉक्सी और कैसे यह वास्तविक इकाई वस्तु
+2

धन्यवाद रॉबर्ट। यहां समस्या यह है कि प्रॉक्सी वास्तव में ऐसा नहीं कर रही है जो इसे करना है। प्रॉक्सी के गेटर्स को वापस शून्य पर कॉल करता है। – juanedi