जैसा कि पहले कहा गया है, @Column(unique = true)
यह एक शॉर्टकट है UniqueConstraint
जब यह केवल एक क्षेत्र है।
आपके द्वारा दिए गए उदाहरण से, दोनों में बहुत बड़ा अंतर है।
@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private ProductSerialMask mask;
@Column(unique = true)
@ManyToOne(optional = false, fetch = FetchType.EAGER)
private Group group;
इस कोड का तात्पर्य है कि दोनों mask
और group
अद्वितीय होना है, लेकिन अलग से। इसका मतलब है कि यदि, उदाहरण के लिए, आपके पास एक मास्क है। आईडी = 1 और मास्क के साथ एक और रिकॉर्ड डालने की कोशिश करता है। = 1 , तो आपको एक त्रुटि मिलेगी, क्योंकि उस कॉलम में अद्वितीय मान होना चाहिए। समूह के लिए एक ही aplies।
दूसरी ओर,
@Table(
name = "product_serial_group_mask",
uniqueConstraints = {@UniqueConstraint(columnNames = {"mask", "group"})}
)
लागू किया जाता है कि संयुक्त + समूह के मूल्य अद्वितीय होने चाहिए। इसका मतलब है कि आपके पास हो सकता है, उदाहरण के लिए, mask.id = 1 और group.id = 1 के साथ एक रिकॉर्ड , और यदि आप mask.id = 1 और group.id = 2 के साथ कोई अन्य रिकॉर्ड सम्मिलित करने का प्रयास करते हैं , तो इसे डाला जाएगा सफलतापूर्वक, जबकि पहले मामले में यह नहीं होगा।
यदि आप मास्क और समूह दोनों को अलग-अलग और कक्षा स्तर पर विशिष्ट बनाना चाहते हैं, तो आपको निम्नलिखित के रूप में कोड लिखना होगा:
@Table(
name = "product_serial_group_mask",
uniqueConstraints = {
@UniqueConstraint(columnNames = "mask"),
@UniqueConstraint(columnNames = "group")
}
)
इसका प्रभाव पहले कोड ब्लॉक के समान है।
unique=true
, तो स्कीम ऑटो-इंडेपेटर द्वारा इंडेक्स नहीं जोड़ा गया था।@UniqueConstraint
यह दिखाई दिया। बग हो सकता है।