2010-12-28 15 views
23

पर अद्वितीय बाधा का उपयोग करके मैं हाइबरनेट पीओजेओ पर अपनी अनूठी बाधाओं को कैसे कार्यान्वित कर सकता हूं? मानते हुए डेटाबेस में कोई भी शामिल नहीं है।हाइबरनेट जेपीए 2

मैंने @Column() एनोटेशन में अद्वितीय विशेषता देखी है लेकिन मैं इसे काम नहीं कर सका?
यदि मैं इस बाधा को एक से अधिक कॉलम पर लागू करना चाहता हूं तो क्या होगा?

+0

'कॉलम' में '''' और' c' नहीं है !!! – KNU

उत्तर

32

Bascially में @Table(uniqueConstraints = ...) एनोटेशन का उपयोग कर अद्वितीय की कमी घोषणा कर सकते हैं, तो आप डेटाबेस के समर्थन के बिना अद्वितीय बाधा लागू नहीं कर सकते।

@UniqueConstraint और unique@Column की विशेषता को श्रेय उत्पादन उपकरण के लिए निर्देश हैं जो corresponsing बाधा उत्पन्न करने के लिए हैं, वे बाधाओं को लागू नहीं करते हैं।

आप नई संस्थाओं को सम्मिलित करने से पहले किसी प्रकार की मैन्युअल जांच कर सकते हैं, लेकिन इस मामले में आपको समवर्ती लेनदेन के साथ संभावित समस्याओं से अवगत होना चाहिए।

इसलिए डेटाबेस में बाधाओं को लागू करना पसंदीदा विकल्प है।

+1

तो ऐप अद्वितीय बाधाओं को लागू नहीं करेगा जब तक डीबी स्पष्ट रूप से इसे जोड़ता है? मुझे लगता है कि डीडीएल –

43

आप अपने वर्ग

@Entity 
@Table(uniqueConstraints= 
      @UniqueConstraint(columnNames = {"surname", "name"})) 
public class SomeEntity { 
    ... 
} 
+0

मैंने इसका उपयोग करने की कोशिश की लेकिन इस एनोटेशन –

+0

की पहचान करने में असमर्थ ग्रहण कौन सा है? @UniqueConstraint? वह javax.persistence.AniqueConstraint – Hons

+1

से आ रहा है मैंने टेबल पर एक बाधा डाली है लेकिन यह –

19

JPA2 में, आप अद्वितीय बाधा सीधे क्षेत्र के लिए जोड़ सकते हैं:

@Entity 
@Table(name="PERSON_TABLE") 
public class Person{ 
    @Id 
    @Column(name = "UUID") 
    private String id; 

    @Column(name = "SOCIALSECURITY", unique=true) 
    private String socialSecurityNumber; 

    @Column(name = "LOGINID", unique=true) 
    private String loginId; 
} 

IMHO इसकी काफी बेहतर तालिका की शुरुआत में की तुलना में गुण के लिए सीधे अद्वितीय बाधा आवंटित करने के लिए।

यदि आपको एक समग्र अद्वितीय कुंजी घोषित करने की आवश्यकता है, तो इसे @table एनोटेशन में घोषित करना आपका एकमात्र विकल्प है।

+0

बंद है क्या यह एक कॉलम के लिए एक अनूठी बाधा है या क्या यह सामाजिक सुरक्षा की संख्या और लॉगिन आईडी के संयोजन के लिए एक अनूठी बाधा है? –

+13

@StephanSchielke यह प्रत्येक कॉलम के लिए एक अलग अद्वितीय बाधा उत्पन्न करता है। एकाधिक क्षेत्रों पर एक अद्वितीय बाधा बनाने के लिए, आपको हंस के दृष्टिकोण का उपयोग करने की आवश्यकता है। – Naliba

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