2009-11-03 23 views
25

मान लें कि मेरे पास 200 कॉलम वाली एक टेबल है और उनमें से अधिकतर कभी भी उपयोग नहीं की जाती हैं।2 उसी तालिका पर जेपीए इकाइयां

मैं अक्सर 10 कॉलम के लिए SmallEntity मानचित्र करता हूं जो अक्सर उपयोग किया जाता है। मैं इसे अन्य संस्थाओं के साथ संघों में उपयोग करता हूं। यह तेजी से लोड होता है, कुछ स्मृति का उपभोग करता है और मुझे खुश करता है।

लेकिन कभी-कभी मुझे 200 कॉलम प्रदर्शित करने की आवश्यकता होती है। मैं 200 कॉलम पर बिगएन्टीटी क्लास को मैप करना चाहता हूं। यह किसी अन्य इकाई के लिए बाध्य नहीं है, इसमें कोई सहयोग नहीं है।

प्रश्न: क्या आपके पास ऐसा कोई अनुभव है? क्या आप किसी भी परेशानी से अवगत हैं जो हाइबरनेट के पास होगा, उदाहरण के लिए पहले स्तर के कैश, गंदे जांच और इकाई जीवन चक्र सामान्य रूप से?

+1

अच्छा सवाल। नए ढांचे के लिए माइग्रेशन ऐसे प्रश्न के लिए एक और कारण हो सकता है। जैसे विरासत प्रणाली और नई प्रणाली हो सकती है और दोनों को एक ही डेटाबेस के खिलाफ काम करना चाहिए। – TomR

उत्तर

17

यह करने के लिए सबसे सरल तरीका गुण मैप करने के लिए आप का उपयोग नहीं करते है अक्सर lazy के रूप में:

<property name="extendedProperty" lazy="true" /> 

... or using Annotations ... 

@Basic(fetch = FetchType.LAZY) 
String getExtendedProperty() { ... } 

हाइबरनेट ऐसे गुणों शुरू में लोड नहीं होता; इसके बजाय वे मांग पर लोड हो जाएंगे (जब पहली बार पहुंचेगा)। आप अपने एचक्यूएल क्वेरी में fetch all properties क्लॉज का उपयोग कर सभी गुणों को लोड करने के लिए हाइबरनेट को मजबूर कर सकते हैं।

एक और संभावित परिदृश्य वास्तव में एक ही टेबल पर दो पूरी तरह से अलग इकाइयों को मैप करना है, लेकिन उनमें से एक को immutable बनाएं। ध्यान रखें कि वे को हाइबरनेट द्वारा अलग-अलग इकाइयों के रूप में माना जाएगा, जिसमें पहले/दूसरे स्तर के कैश दोनों के लिए पूरी तरह से अलग होते हैं (यही कारण है कि अपरिवर्तनीयता महत्वपूर्ण है)।

आप नहीं क्योंकि हाइबरनेट हमेशा एक वास्तविक ठोस इकाई प्रकार रिटर्न विरासत मानचित्रण के माध्यम से इस कार्यक्षमता को प्राप्त करने में सक्षम हो जाएगा। एक विस्तृत स्पष्टीकरण के लिए Hibernate Inheritance Strategy प्रश्न के उत्तर पर एक नज़र डालें।

+0

इस महान उत्तर के लिए बहुत बहुत धन्यवाद! –

+0

ऐसा लगता है कि गुणों के आलसी लाने के लिए बाइटकोड उपकरण की आवश्यकता होती है। क्या परियोजनाओं पर इतना आम है? यह हाइबरनेट एनोटेशन गाइड से है: संपत्ति स्तर आलसी लाने के लिए सक्षम करने के लिए, आपके वर्गों का वाद्य यंत्र होना चाहिए: इस सुविधा को सक्षम करने के लिए बाइटकोड मूल में जोड़ा जाता है, कृपया हाइबरनेट संदर्भ दस्तावेज़ देखें। यदि आपके वर्गों का वाद्य यंत्र नहीं है, तो संपत्ति स्तर आलसी लोडिंग को चुपचाप अनदेखा किया जाता है।

+0

हां, आलसी गुणों के लिए बाइटकोड उपकरण आवश्यक है लेकिन निर्माण के दौरान जोड़ना आसान है (http://docs.jboss.org/hibernate/stable/core/reference/en/html/performance.html#performance-fetching-lazyproperties)। यह बहुत आम नहीं है (मेरे अनुभव में) क्योंकि आलसी गुणों के लिए उपयोग का मामला (आलसी संघों के विपरीत) सामान्य नहीं है लेकिन यह बहुत दुर्लभ नहीं है। यह निश्चित रूप से पहले किया गया है और उत्पादन तैयार है अगर यह आपकी चिंता है। – ChssPly76

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