2010-08-04 10 views
70

में एकाधिक अनूठी बाधाएं क्या जेपीए का उपयोग करके निर्दिष्ट करने का कोई तरीका है कि स्तंभों के विभिन्न सेटों पर कई अद्वितीय बाधाएं होनी चाहिए?जेपीए

@Entity 
@Table(name="person", 
     [email protected](columnNames={"code", "uid"})) 
public class Person { 
    // Unique on code and uid 
    public String code; 
    public String uid; 

    // Unique on username 
    public String username; 

    public String name; 
    public String email; 
} 

मैं एक हाइबरनेट विशिष्ट एनोटेशन देखा है, लेकिन मैं हम अभी भी हाइबरनेट और datanucleus के बीच तय कर रहे हैं के रूप में विक्रेता विशिष्ट समाधान से बचने के लिए कोशिश कर रहा हूँ।

+7

+1 विक्रेता विशिष्ट एनोटेशन से बचने की कोशिश करने के लिए +1 – corydoras

उत्तर

112

@Table की विशेषता uniqueConstraints वास्तव में इनमें से एक सरणी स्वीकार करती है। आपका उदाहरण एक तत्व के साथ एक सरणी के लिए सिर्फ एक लघुरूप है। Otherewise यह कैसा दिखेगा: जब भी अद्वितीय बाधा केवल एक ही क्षेत्र पर आधारित है

@Table(name="person", uniqueConstraints={ 
    @UniqueConstraint(columnNames={"code", "uid"}), 
    @UniqueConstraint(columnNames={"anotherField", "uid"}) 
}) 

, तो आप उस स्तंभ पर @Column(unique=true) उपयोग कर सकते हैं।

+1

मुझे वर्तमान में यह एनोटेशन है, लेकिन ऐसा लगता है कि हाइबरनेट तालिका के लिए इंडेक्स उत्पन्न नहीं कर रहा है कि तालिका पहले से मौजूद है या नहीं (और यह अपडेट करने के लिए सेट है) या यदि मैं टेबल हटा देता हूं और हाइबरनेट स्वचालित रूप से इसे उत्पन्न करने दें। क्या मैं कुछ भूल रहा हूँ? –