2012-01-12 14 views
5

लागू करें, मैं केवल कुछ @NotBlank एनोटेशन लागू करना चाहता हूं यदि कोई अन्य फ़ील्ड गलत है। मेरे वर्तमान प्रोजेक्ट पर हमें हाइबरनेट सत्यापनकर्ता का उपयोग करना होगा, इसलिए इसे हल करने के लिए कोई कॉमन्स सत्यापन + वैलंग उपलब्ध नहीं है।हाइबरनेट सत्यापनकर्ता - सशर्त रूप से वैधता

चूंकि मैं एक आसान चीज को हल करने के लिए बस कई कस्टम एनोटेशन बनाने का बहुत शौक नहीं हूं (थोड़ा झुका हुआ है कि यह जेएसआर -303 स्पेक का हिस्सा नहीं है) मैं सोच रहा था कि अगर कोई स्वीकार्य तरीका जानता है यह प्राप्त करने के। मुझे एक जार मिला जो कि इसे पूरा करता था, लेकिन वह हाइबरनेट के लिए था 3. और परिवर्तनों के कारण ...

उत्तर

5

इस मामले के लिए, सुझाए गए दृष्टिकोण वर्ग या संपत्ति स्तर के बजाय कक्षा-स्तर की बाधाओं का उपयोग करना है।

देखें Hibernate Validator Docs

मैं अब यह कष्टप्रद है। मेरे पास इस तरह का एक परिदृश्य था और @NotEmpty (निर्भर करता है = "anotherField") और कुछ पूरी तरह विफलता की तरह कुछ करने की कोशिश की।

शायद कुछ अन्य सदस्यों को ऐसा करने का एक और तरीका पता है, लेकिन अभी के लिए, मैं कर रहा हूं कि हाइबरनेट वैलिडेटर क्या कहता है।

+0

ईमानदार होने के लिए, मेरी राय में इस तरह के परिदृश्य के लिए समर्थन की कमी जेएसआर -303 स्पेक के साथ मेरे पालतू शिखर में से एक है। और वर्ग स्तर की बाधाएं अच्छी और सभी हैं, लेकिन वे आपको आपके त्रुटि संदेशों को रखने और अनुकूलित करने के साथ समान लचीलापन नहीं देते हैं। –

+1

सहमत हैं, लेकिन मुझे बात सिर्फ चिंताओं को अलग करने का मामला है। फील्ड सत्यापन विशेष रूप से एक फ़ील्ड/संपत्ति (खाली, शून्य, एक्स से अधिक, वाई से कम) के लिए होते हैं। वे अपरिवर्तनीय मान्यताओं हैं जिन्हें सिस्टम के किसी अन्य भाग पर निर्भर नहीं माना जाता है। आप इससे कभी भ्रमित नहीं होंगे। अन्यथा, कोई सिर्फ एक फ़ील्ड में सत्यापन पागलपन बना सकता है। – Beccari

+1

@ बेकरी यदि मेरी स्थिति यह है कि यदि फ़ील्ड 1 = सत्य तो दूसरे को मान्य करें। और मान लें कि मेरा दूसरा क्षेत्र एक वर्ग वस्तु है, और अभी के लिए मैं बस @Valid का उपयोग कर रहा हूं। अगर मैं इसे बनाना चाहता हूं- अन्यथा चीज की तरह, मुझे अपने अन्य क्षेत्र के लिए सत्यापन तंत्र को सही तरीके से लिखना होगा? मैं अब {@ मान्य 'का उपयोग नहीं कर सकता – Kraken