मेरे पास डेटाबेस में दो Integer
कॉलम हैं (डर्बी और डीबी 2)। मुझे उन्हें एक दूसरे के साथ JPQL
के अंदर विभाजित करने की आवश्यकता है।मैं एक जेपीक्यूएल कथन के अंदर टाइपकास्टिंग का उपयोग कैसे कर सकता हूं?
दोनों कॉलम Integer
प्रकार शून्य हैं यदि शेष दशमलव संख्या है तो 0.25
0
आदि हो जाता है और समझ में आता है क्योंकि टाइप int है।
SQL
में मैं उदाहरण
select CAST(column1 as decimal(6,2))/CAST(column2 as decimal(6,2))from Sometable;
के लिए इस हो सकता था लेकिन JPQL
बराबर क्या है।
एक विकल्प हो सकता है (मैं अभी तक प्रयास नहीं किया है) इकाई में एक @Transient
विधि दशमलव प्रकार लौटने और वहाँ इस गणना कर रहे हैं और JPQL
है कि पारित करने के लिए है, लेकिन मैं नहीं बल्कि SQL
यह काम करते हैं जाएगा।
माइस्क्ल को डेटाबेस स्तर पर कास्टिंग की आवश्यकता नहीं है। इसलिए विभिन्न आरडीबीएमएस के लिए व्यवहार अलग है जो ठीक है। लेकिन जेपीक्यूएल को यह जानने के लिए देशी क्वेरी का उपयोग करने की ज़रूरत है कि इस ऑपरेशन के लिए दशमलव पर कास्ट की आवश्यकता है।
बोली को जोड़ने <property name="openjpa.jdbc.DBDictionary" value="derby"/>
ने इसे ठीक नहीं किया।
कृपया ध्यान दें यह JPA1
मुझे उम्मीद है कि div/ऑपरेटर को कास्ट की आवश्यकता के बिना दशमलव वापस करने की उम्मीद होगी, लेकिन ऐसा नहीं हो रहा है। बोली लगाने की व्यवस्था भी करनी चाहिए/इस पर ध्यान रखना चाहिए, लेकिन मामला भी नहीं। मैं देशीQuery की तरफ झुका रहा हूं लेकिन मुझे अभी भी विश्वास नहीं है कि यह केवल विकल्प नहीं है। यदि यह वास्तव में दुख की तरह है। +1। – Shahzeb
क्या आप विस्तार से बता सकते हैं कि आप डायलेक्ट को स्वचालित रूप से कास्टिंग करने की अपेक्षा क्यों करते हैं? – Victor
@ कौशिक क्योंकि दो पूर्णांकों का विभाजन अंतर्निहित डेटाबेस के आधार पर एक अलग डेटाटाइप उत्पन्न करता है। उदाहरण के लिए 'माइस्क्ल' एक दशमलव देता है जहां 'डर्बी' और' डीबी 2 'पूर्णांक होता है जो उदाहरण के लिए '0.25' से' 0' बदलता है। वहां पूर्व बोली को व्यवहार को जानना चाहिए और एक मशीन प्रदान करना चाहिए विशेष रूप से दिया गया है कि एक कास्ट का विकल्प 'जेपीक्यूएल' में उपलब्ध नहीं है। – Shahzeb