क्या कोई मुझे बता सकता है कि जेपीए double
प्रकार फ़ील्ड प्रकार के रूप में क्यों उपयोग करता है, लेकिन javax.validation.constraints
में बीन सत्यापन कॉन्स्टेंट्स (यानी @Min/@Max) इसका समर्थन नहीं करते हैं? मुझे पता है कि प्रलेखन कहता है कि यह गोल करने वाली त्रुटियों के कारण है, लेकिन यदि मैं फ़ील्ड प्रकार को double
मानता हूं तो मैं पहले से ही स्वीकार करता हूं कि मुझे स्पष्ट परिशुद्धता के बारे में बहुत कुछ परवाह नहीं है।बीन सत्यापन क्यों न्यूनतम/अधिकतम बाधाएं डबल प्रकार का समर्थन नहीं करती हैं?
परिदृश्य मैं इस दुविधा में भाग गया निम्नलिखित है: मेरे पास एक संस्था है जो पृथ्वी की सतह पर एक बिंदु का प्रतिनिधित्व करती है। यदि परिशुद्धता कुछ सेंटीमीटर के भीतर है तो यह ठीक है। ऐसा कुछ दिखता है:
@Entity
public class Point {
/**
* The longitude in radians.
*/
@Min(-Math.Pi)
@Max(Math.Pi)
double longitude;
/**
* The latitude in radians.
*/
@Min(-Math.Pi/2)
@Max(Math.Pi/2)
double latitude;
}
दुर्भाग्यवश यह काम नहीं करता है, क्योंकि टिप्पणियां डबल प्रकार का समर्थन नहीं करती हैं। लेकिन BigDecimal
का उपयोग करना वास्तव में एक विकल्प नहीं है, क्योंकि मेरे पास कई बिंदुओं के साथ कुछ व्यापक गणना है जो अभी भी उचित रूप से तेज़ होने की आवश्यकता है। मैंने कस्टम बाधा जांच को परिभाषित करके इसके आसपास काम किया जो double
एस के साथ काम करता है, लेकिन किसी भी तरह से मुझे लगता है कि पूरी कहानी में मुझे कुछ याद आ रही है। तो मुझे क्या याद आ रही है?
कृपया ध्यान दें कि JPA और बीन मान्यकरण दो पूरी तरह से अलग API हैं में से एक के लिए तय करने के लिए किया था। मैंने शीर्षक तय किया, तदनुसार कुछ शब्द और टैग। शानदार सवाल उदाहरण बीटीडब्ल्यू। आप क्या बीन सत्यापन कार्यान्वयन का उपयोग कर रहे हैं? हाइबरनेट वैलिडेटर? – BalusC
हां, अभी मैं हाइबरनेट वैलिडेटर का उपयोग कर रहा हूं। –
आप वास्तव में न्यूनतम या अधिकतम (कम से कम हाइबरनेट वैलिडेटर में) के साथ डबल को एनोटेट कर सकते हैं। डबल प्रकार समर्थित है। आपकी समस्या यह प्रतीत होती है कि आप बाधा पैरामीटर के रूप में डबल निर्दिष्ट नहीं कर सकते हैं। वहाँ spec वास्तव में एक लंबे समय तक लागू करता है। क्या आपने DecimalMin और DecimalMax का उपयोग करने पर विचार किया है? आप अपने न्यूनतम और अधिकतम मान स्ट्रिंग के रूप में निर्दिष्ट कर सकते हैं। – Hardy