2010-11-05 23 views
6

मेरे पास टैग रखने के लिए एक MySQL तालिका है (यानी स्टैक ओवरफ़्लो पर उपयोग किए गए लोगों की तरह)। यह टैग को पकड़ने के लिए बस एक आईडी (पीके) और एक टैग कॉलम है।हाइबरनेट - अद्वितीय कॉलम बाधा को अनदेखा किया जा रहा है

मेरी टैग इकाई के लिए एनोटेटेड विधियां नीचे दिखाए गए हैं।

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "id", unique = true, nullable = false) 
public int getId() { 
    return this.id; 
} 

@Column(name = "tag", unique = true, nullable = false) 
public String getTag() { 
    return this.tag; 
} 

मैं टैग पर एक अद्वितीय कॉलम बाधा का उपयोग कर रहा हूं क्योंकि किसी दिए गए टैग के लिए कभी भी एक से अधिक पंक्ति नहीं होनी चाहिए। हालांकि, हाइबरनेट इस बात को अनदेखा कर रहा है, यानी मैं एक ही टैग को कई बार सहेज सकता हूं और यह अपवाद फेंकने की बजाए बस एक नई पंक्ति बनाता है।

क्या मुझे कुछ याद आ रहा है या यह काम करना चाहिए?

उत्तर

3

UniqueConstraint की JavaDoc से (@Colunm पर unique=true सिर्फ एक शॉर्टकट है):

यह टिप्पणी है कि एक अद्वितीय बाधा एक प्राथमिक या माध्यमिक तालिका के लिए उत्पन्न DDL में शामिल किया जाना है निर्दिष्ट करने के लिए प्रयोग किया जाता है।

तो ऐसा लगता है कि यह आवेषण पर विशिष्टता को लागू नहीं करता है। आपको किसी भी मामले में डेटाबेस में एक अद्वितीय बाधा बनाना चाहिए।

0

आपको याद है कि यह केवल एक जानकारी है।

आपको डेटाबेस में कॉलम पर भी बाधा जोड़नी चाहिए।

+0

उत्तर के लिए धन्यवाद। वैसे, यह हास्यास्पद नहीं है ?! – zakmck

+0

नहीं, यह नहीं है। डेटाबेस मान्य है कि इकाई वास्तव में अद्वितीय है। एक ओआरएम इतना तेज़ नहीं हो सकता है। यही कारण है कि यह समझ में आता है। –

+1

मेरा मतलब है, हास्यास्पद नहीं है कि मैं उस एनोटेशन का उपयोग करता हूं और यह डीबी में एक संवाददाता अद्वितीय बाधा नहीं बनाता है? इस तरह मैंने शुरुआत में यह समझ लिया कि यह व्यवहार करता है, हालांकि मैंने कुछ प्रयोग किए हैं और ऐसा लगता है कि यह केवल स्कीमा के लिए 'अद्वितीय = सत्य' को प्रतिबिंबित नहीं करता है जब मैं कुछ डेटाबेस का उपयोग करता हूं, जैसे एचएसक्यूएल, वही कोड एक MySQL बाधा उत्पन्न करता है मैं डीबी विन्यास स्विच। – zakmck

संबंधित मुद्दे