5

पर 'संस्करण' फ़ील्ड शामिल करना चाहिए, मुझे पता है कि जब मेरी लगातार संस्थाओं के hashcode() और equals() ओवरराइड करते हैं तो मुझे आईडी शामिल नहीं करना चाहिए और केवल सार्थक गुणों को शामिल करना चाहिए जो विशिष्ट रूप से ऑब्जेक्ट की पहचान करते हैं । लेकिन version फ़ील्ड के बारे में क्या है जिसका उपयोग आशावादी समेकन नियंत्रण के लिए हैबर्नेट द्वारा किया जाता है? क्या मुझे आईडी की तरह ही इसे छोड़ना चाहिए? क्या होगा यदि new User(name='John', version=1).equals(new User(name='John',version=2)) कहें, तो क्या यह किसी भी तरह से हाइबरनेट ओसीसी को भ्रमित नहीं करेगा?हाइबरनेट: क्या मुझे हैशकोड() और बराबर() विधियों

उत्तर

3

यह अनुशंसा की जाती है कि आप व्यवसाय कुंजी समानता का उपयोग करके बराबर() और हैशकोड() लागू करें। व्यापार कुंजी समानता का अर्थ है कि बराबर() विधि केवल उन गुणों की तुलना करती है जो व्यवसाय कुंजी बनाते हैं। यह एक महत्वपूर्ण यह है कि असली दुनिया में हमारे उदाहरण की पहचान हैं (एक प्राकृतिक उम्मीदवार कुंजी)

तो है आप नहींequals()hashcode()

में संस्करण संपत्ति को शामिल करना चाहिए देखें: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode

+0

हाँ, मैं मैंने इसे पढ़ा है। लेकिन चूंकि 'संस्करण' फ़ील्ड का उल्लेख नहीं किया गया है और इसके उद्देश्य को ध्यान में रखते हुए (अलग-अलग मानों का अर्थ अलग-अलग वस्तुओं का है) मैंने संदेह किया। लेकिन हाइबरनेट ने आवेदन में किसी और चीज के लिए 'संस्करण' का उपयोग न करने की सिफारिश की है। तो, जितना अधिक मैं इसके बारे में सोचता हूं उतना ही मुझे आश्वस्त हो जाता है कि 'संस्करण' ** ** को ** बराबर() 'और' हैशकोड() 'में शामिल नहीं किया जाना चाहिए। – wajda

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