2008-10-22 5 views
8

मैं एक परियोजना के लिए हाइबरनेट में एक कस्टम उपयोगकर्ता टाइप बना रहा हूं। यह तब तक अपेक्षाकृत सरल है जब तक कि मैं आभासी विधि नहीं आया। मैं यह समझने की कोशिश कर रहा हूं कि इस विधि का क्या मतलब है, अनुबंध-वार।एक कस्टम हाइबरनेट उपयोगकर्ता प्रकार बनाना - क्या मायनेबल() का मतलब है?

क्या इसका मतलब यह है कि मैं जिस वर्ग के लिए उपयोगकर्ता टाइप बना रहा हूं वह अपरिवर्तनीय है या इसका मतलब यह है कि इस वर्ग के उदाहरण के संदर्भ में ऑब्जेक्ट का एक अलग उदाहरण कभी भी इंगित नहीं करेगा?

मुझे Hibernate Community Wiki में कुछ उदाहरण मिले, जहां वे सच हो गए, क्योंकि ऑब्जेक्ट स्वयं ही परिवर्तनीय था - http://www.hibernate.org/73.html

समुदाय विकी में अन्य उदाहरण बिना किसी संबोधित किए झूठे लौट आए, भले ही वे भी उत्परिवर्तनीय थे।

मैंने जावाडॉक की जांच की है, लेकिन यह बहुत स्पष्ट नहीं है।

JavaDoc से UserType के लिए:

public boolean isMutable() 
    Are objects of this type mutable? 
    Returns: 
     boolean 

JavaDoc से Type के लिए:

public boolean isMutable() 
    Are objects of this type mutable. (With respect to the referencing 
    object ... entities and collections are considered immutable because 
    they manage their own internal state.) 
    Returns: 
     boolean 
+1

लिंक अब मान्य नहीं हैं fyi – Jackie

उत्तर

9

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

अधिक जानकारी और नमूना प्रोजेक्ट के लिए this blog post देखें।

2

यहाँ विशिष्ट उदाहरण स्ट्रिंग वर्ग है - यह अपरिवर्तनीय है, यानी एक बार स्ट्रिंग बनाई गई है आप नहीं कर सकते अपनी सामग्री या राज्य को बदलें, और यदि आप चाहते हैं तो आपको इसे एक नई प्रति में संसाधित करना होगा।

isMutable वापस लौटने का मतलब है कि आप कह रहे हैं कि इस ऑब्जेक्ट को बाहरी वस्तुओं द्वारा अपना राज्य बदल सकता है, झूठे साधनों को लौटाने के लिए आपको इस ऑब्जेक्ट को एक नए उदाहरण में कॉपी करना होगा, जिस तरह से राज्य में परिवर्तनों को लागू किया जाएगा। या जैसा आपने कहा था: "क्या इसका मतलब यह है कि इस वर्ग के उदाहरण के संदर्भ में ऑब्जेक्ट एक अलग उदाहरण को इंगित नहीं करेगा"।

+2

Type.isMutable() के लिए JavaDoc में, वे अरण्यों को अपरिवर्तनीय के रूप में चिह्नित करने के लिए कहते हैं। लेकिन ऐसा लगता है कि आपने जो कहा है, उसके विपरीत है, क्योंकि सरणी बाहरी वस्तुओं द्वारा अपना राज्य बदल सकती है। –

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