2008-09-18 17 views
8

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

निम्न स्निपेट में, मुझे कमांड और मॉडल को अद्वितीय होने की आवश्यकता है। पीके निश्चित रूप से प्राथमिक कुंजी है।

@Entity 
@Table(name = "dm_action_plan", 
     uniqueConstraints={ @UniqueConstraint(columnNames= "command","model") }) 
public class ActionPlan { 
    @Id 
    private int pk; 

    @Column(name = "command", nullable = false) 
    private String command; 

    @Column(name = "model", nullable = false) 
    String model; 
} 

यह आपके जेपीए कार्यान्वयन अद्वितीय बाधा के लिए DDL उत्पन्न करने के लिए अनुमति देगा:

@Entity 
@Table(name = "dm_action_plan") 
public class ActionPlan { 
    @Id 
    private int pk; 
    @Column(name = "command", nullable = false) 
    private String command; 
    @Column(name = "model", nullable = false) 
    String model; 
} 
+0

एक विदेशी कुंजी के रूप में एक यौगिक कुंजी का उपयोग कर के साथ समस्या क्या है व्यक्त करने के लिए? –

उत्तर

18

आप @UniqueConstraint कुछ इस तरह उपयोग कर सकते हैं।

+0

सही फॉर्म इस तरह है: @Table (name = "dm_action_plan") @UniqueConstraint (columnNames = {"command", "model"}) – homaxto

+0

homaxto: ईजेबी 3.0 विनिर्देश के अनुसार, मिशेल ने सही फॉर्म दिया। – Nicolas

0

उपयोग @GeneratedValue संकेत मिलता है कि कुंजी उत्पन्न हो जाएगा और @UniqueConstraint Unicity

@Entity 
@Table(name = "dm_action_plan" 
     uniqueConstraint = @UniqueConstraint({"command", "model"}) 
) 
public class ActionPlan { 
    @Id 
    @GeneratedValue 
    private int pk; 
    @Column(name = "command", nullable = false) 
    private String command; 
    @Column(name = "model", nullable = false) 
    String model; 
} 
+0

यह एक यौगिक बाधा नहीं बनाएगा। यह दो बाधाएं पैदा करेगा, प्रत्येक कॉलम नाम के लिए प्रत्येक जिसे आपने @UniqueConstraint में लिखा था। – emanuelcds

+0

फिर आपका जेपीए कार्यान्वयन गलत है। जेपीए 2 विनिर्देश, §11.1.4 9 कॉलम नाम "कॉलम नामों की एक सरणी है जो ** बाधा **" (बाधा, बाधा नहीं) बनाती है। – Nicolas