2012-06-08 37 views
8

के साथ बिगडिसीमल सटीक नहीं रहा है, मैं जवाक्स.पर्सिस्टेंस एपीआई और हाइबरनेट का उपयोग एनोटेशन बनाने और ओरेकल 11 जी एक्सप्रेस डेटाबेस में एंटीटीज और उनके गुणों को बनाए रखने के लिए कर रहा हूं।जेपीए एनोटेशन

मैं एक इकाई में निम्न विशेषता है:

@Column(precision = 12, scale = 9) 
private BigDecimal weightedScore; 

लक्ष्य 12 अंक की एक अधिकतम और दशमलव स्थान के अधिकार के लिए उन अंकों के 9 की एक अधिकतम के साथ एक दशमलव मान लागू करने के लिए है।

weightedScore की गणना करने के बाद, परिणाम 0.1234 है, लेकिन एक बार जब मैं ओरेकल डेटाबेस के साथ इकाई करता हूं, तो मान 0.12 के रूप में प्रदर्शित होता है।

मैं इसे एंटिटी मैनेजर ऑब्जेक्ट का उपयोग करके प्रविष्टि से पूछने के लिए या इसे सीधे वेब ब्राउज़र में ओरेकल एप्लिकेशन एक्सप्रेस (एपेक्स) इंटरफ़ेस में देखकर देख सकता हूं।

मुझे अपने BigDecimal विशेषता को कैसे एनोटेट करना चाहिए ताकि सटीकता सही ढंग से बनी रहे?

नोट: हम अपने यूनिट परीक्षण चलाने के लिए एक इन-मेमोरी एचएसक्यूएल डेटाबेस का उपयोग करते हैं, और @Column एनोटेशन के साथ या बिना परिशुद्धता की कमी के साथ समस्या का अनुभव नहीं होता है।

अद्यतन:

तालिका वर्णन को देखते हुए, weightedScore स्तंभ की परिभाषा NUMBER(19, 2) है। मैंने अब एनोटेशन को @Column(columnDefinition="Number(12, 9)") में बदलने की कोशिश की है, लेकिन इसका कोई प्रभाव नहीं पड़ा है। क्या किसी को पता है कि ओरेकल इन एनोटेशन के लिए उत्तरदायी क्यों नहीं है?

उत्तर

5

मैं इस सवाल का जवाब मिल गया। हुज़्ज़ाह!

मैं Oracle एपेक्स इंटरफेस के माध्यम से निम्न क्वेरी को निष्पादित करने का प्रयास किया:

alter table NODE modify (WEIGHTEDSCORE NUMBER(12, 9));

मैं यह बताते हुए कि एक स्तंभ डेटा वाली कम सटीक या उससे कम पैमाने के लिए बदला नहीं जा सकता कोई त्रुटि हुई। यह मेरा मुद्दा था!

क्योंकि मैं मौजूदा डेटा के साथ तालिका को बदलने का प्रयास कर रहा था, इसलिए मुझे तालिका को छोड़ने और इसे फिर से शुरू करने की आवश्यकता थी, या कॉलम को केवल अधिक सटीकता और स्केल करने के लिए बदलने की आवश्यकता थी।

मैं सफलता के साथ निम्न क्वेरी का प्रयास किया:

alter table NODE modify (WEIGHTEDSCORE NUMBER(26, 9));

तर्क है कि मैं दशमलव के दाईं ओर परिशुद्धता के 7 स्थानों जोड़ना चाहते हैं, तो मैं करने के लिए समग्र परिशुद्धता के लिए 7 द्वारा जोड़ा जा रहा पैमाने में वृद्धि के लिए क्षतिपूर्ति। इस तरह, कॉलम दाएं तरफ परिशुद्धता जोड़ते समय दशमलव के बाईं ओर सभी मौजूदा परिशुद्धता रख सकता है।

1

ऐसा लगता है कि आप इस के साथ समस्या हो केवल एक ही नहीं कर रहे हैं: http://www.eclipse.org/forums/index.php/m/716826/

+0

बग-रिपोर्ट में यह भी कहा गया है कि बग केवल 9,223,372,036,854,775,808 से बड़े मानों पर लागू होता है और यह _fixed_ है। – Ben