java - जेपीए और बीन सत्यापन के साथ अद्वितीय बाधा
validation jpa (3)
मैं बीन सत्यापन के साथ @Unique
बाधा चाहता हूं, लेकिन यह मानक द्वारा प्रदान नहीं किया जाता है। अगर मैं जेपीए के @UniqueConstraint
का उपयोग @UniqueConstraint
मेरे पास एक अद्वितीय सत्यापन और त्रुटि रिपोर्टिंग तंत्र नहीं होगा।
क्या @Unique
को बीन सत्यापन बाधा के रूप में परिभाषित करने और जेपीए के साथ गठबंधन करने का कोई तरीका है, जैसे कि जेपीए एक अद्वितीय बाधा के साथ एक स्तंभ बनाता है और जांच करता है कि एक मूल्य अद्वितीय है या नहीं?
@Unique को कार्यान्वित करने और इसके आसपास समस्याग्रस्त करने के तरीके के बारे में अधिक जानकारी यहां मिल सकती है - http://community.jboss.org/wiki/AccessingtheHibernateSessionwithinaConstraintValidator
आप एक वैधकर्ता जेपीए एनोटेशन पढ़ सकते हैं और इसे लागू कर सकते हैं। वसंत वैधकर्ताओं का उपयोग करके यहां कुछ उदाहरण दिया गया है जिसे विस्तारित करने के विचार के रूप में उपयोग किया जा सकता है।
जेपीए जेएसआर 303 स्प्रिंग फॉर्म सत्यापन
आप एक कस्टम वैलिडेटर में अपने सत्र बीन को इंजेक्ट कर सकते हैं ( @Inject
या स्प्रिंग का @Autowired
) और कंटेनर को यह पता होना चाहिए कि इसे कैसे तार किया जाए। मैं केवल इसे एक वसंत उदाहरण के रूप में जानता हूं:
import javax.validation.ConstraintValidator;
public class MyConstraintValidator implements ConstraintValidator {
@Autowired //@Inject
private Foo aDependency;
...
}
जब तक आप पूरी तालिका पर लॉक प्राप्त नहीं करते हैं, तब तक मूल रूप से SQL क्वेरी का उपयोग करके यूनिकिटी की जांच करना संभव नहीं है (कोई समवर्ती लेनदेन मैन्युअल जांच के बाद डेटा को संशोधित कर सकता है लेकिन चल रहे लेनदेन की प्रतिबद्धता से पहले)। दूसरे शब्दों में, जावा स्तर पर वैध अद्वितीय सत्यापन लागू करना संभव नहीं है और इस प्रकार सत्यापन कार्यान्वयन प्रदान करना संभव है। लेनदेन करने के दौरान यूनिकिटी की जांच करने का एकमात्र विश्वसनीय तरीका है।
बीवी स्पेक इसे इस तरह सारांशित करता है:
परिशिष्ट डी जावा पर्सिस्टेंस 2.0 एकीकरण
प्रश्न: क्या हमें @ यूनिक जोड़ना चाहिए जो @ कॉलम (अद्वितीय = सत्य) पर मैप करेगा?
@Unique को जावा स्तर पर विश्वसनीय रूप से परीक्षण नहीं किया जा सकता है लेकिन डेटाबेस अद्वितीय बाधा उत्पन्न कर सकता है। @ यूनिक आज बीवी स्पेक का हिस्सा नहीं है।
इसलिए जब मैं सहमत हूं कि एक बीन सत्यापन अपवाद में लिपटे अद्वितीय (और गैर शून्य) बाधा उल्लंघन होना अच्छा लगेगा, यह वर्तमान में मामला नहीं है।
संदर्भ
- बीन सत्यापन विनिर्देश (जेएसआर 303)
- सत्यापन और दृढ़ता बाधाओं के बारे में प्रश्न