जावा में @UniqueConstraint एनोटेशन


168

मेरे पास एक जावा बीन है। अब, मैं यह सुनिश्चित करना चाहता हूं कि क्षेत्र अद्वितीय होना चाहिए।

मैं निम्नलिखित कोड का उपयोग कर रहा हूं:

@UniqueConstraint(columnNames={"username"})
public String username;

लेकिन मुझे कुछ त्रुटि हो रही है:

@UniqueConstraint is dissallowed for this location

अद्वितीय बाधाओं का उपयोग करने का उचित तरीका क्या है?

नोट: मैं प्ले फ्रेमवर्क का उपयोग कर रहा हूं।


15
"लेकिन मुझे कुछ त्रुटि हो रही है।" हमेशा निर्दिष्ट करें कि प्रश्न में आपको क्या त्रुटि हो रही है। आपके पास प्रासंगिक जानकारी है जो आपकी समस्या को हल करने में हमारी बहुत मदद कर सकती है - इसे अपने तक न रखें।
जॉन स्कीट

क्या @id एनोटेशन का उपयोग करना संभव होगा?
एल्बिनोसोर्डफ़िश

जवाबों:


415

फ़ील्ड मान सुनिश्चित करने के लिए आप लिख सकते हैं अद्वितीय है

@Column(unique=true)
String username;

@UniqueConstraint एनोटेशन टेबल स्तर पर कई विशिष्ट कुंजियों को एनोटेट करने के लिए है, यही वजह है कि इसे किसी फ़ील्ड पर लागू करते समय आपको एक त्रुटि मिलती है।

संदर्भ (जेपीए टॉपलिंक):


17
यह ध्यान रखना महत्वपूर्ण है कि यह केवल तभी काम करेगा जब आप JPA को अपनी सारणियाँ बनाने दें
naoru

118

आप वाक्य रचना के बाद कक्षा स्तर पर उपयोग कर सकते हैं

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames={"username"})})
public class SomeEntity {
    @Column(name = "username")
    public String username;
}

42

मैं वर्तमान में हाइबरनेट और जेपीए 2.0 एनोटेशन के साथ प्ले फ्रेमवर्क का उपयोग कर रहा हूं और यह मॉडल समस्याओं के बिना काम करता है

@Entity
@Table(uniqueConstraints={@UniqueConstraint(columnNames = {"id_1" , "id_2"})})
public class class_name {

@Id
@GeneratedValue
public Long id;

@NotNull
public Long id_1;

@NotNull
public Long id_2;

}

आशा है कि यह मदद की।


20

नोट: कोटलिन में एनोटेशन में सरणियों को घोषित करने के लिए सिंटैक्स का उपयोग करता arrayOf(...)है{...}

@Entity
@Table(uniqueConstraints=arrayOf(UniqueConstraint(columnNames=arrayOf("book", "chapter_number"))))
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)

नोट: Kotlin 1.2 के रूप में इसका [...]सिंटैक्स का उपयोग करना संभव है, ताकि कोड बहुत सरल हो जाए

@Entity
@Table(uniqueConstraints=[UniqueConstraint(columnNames=["book", "chapter_number"])])
class Chapter(@ManyToOne var book:Book,
              @Column var chapterNumber:Int)

13

Way1:

@Entity

@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames = "column1"),@UniqueConstraint(columnNames = "column2")})

- यहाँ Column1 और Column2 दोनों अलग-अलग अद्वितीय अवरोधों के रूप में कार्य करते हैं। Ex: यदि किसी भी समय कॉलम 1 या कॉलम 2 के मूल्य का मिलान होता है तो आपको UNIQUE_CONSTRAINT त्रुटि मिलेगी।

Way2:

@Entity

@Table(name = "table_name", uniqueConstraints={@UniqueConstraint(columnNames ={"column1","column2"})})

- यहां कॉलम 1 और कॉलम 2 के संयुक्त मूल्य दोनों अद्वितीय बाधाओं के रूप में कार्य करते हैं


4
   @Entity @Table(name = "stock", catalog = "mkyongdb",
   uniqueConstraints = @UniqueConstraint(columnNames =
   "STOCK_NAME"),@UniqueConstraint(columnNames = "STOCK_CODE") }) public
   class Stock implements java.io.Serializable {

   }

केवल संयुक्त कुंजी बनाने के लिए उपयोग की जाने वाली अनूठी बाधाएं, जो अद्वितीय होंगी। यह तालिका को अद्वितीय के रूप में संयुक्त कुंजी के रूप में दर्शाएगी।


3

आप तालिका में संयुक्त प्राथमिक कुंजी के लिए, वर्ग स्तर पर @ यूनिकॉनस्ट्रैटिन का उपयोग कर सकते हैं। उदाहरण के लिए:

 @Entity
 @Table(name = "PRODUCT_ATTRIBUTE", uniqueConstraints = {
       @UniqueConstraint(columnNames = {"PRODUCT_ID"}) })

सार्वजनिक वर्ग ProductAttribute {}


1

अद्वितीय एनोटेशन को विशेषता घोषणा के ठीक ऊपर रखा जाना चाहिए। UniqueContraints डेटा वर्ग घोषणा के ऊपर @Table एनोटेशन में जाते हैं। निचे देखो:

@Entity
@Table(uniqueConstraints= arrayOf(UniqueConstraint(columnNames = arrayOf("col_1", "col_2"))))
data class Action(
        @Id @GeneratedValue @Column(unique = true)
        val id: Long?,
        val col_1: Long?,
        val col_2: Long?,
)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.