2011-06-23 22 views
9

मैं अपने जेपीए मॉडल में निम्नलिखित वर्गों (टिककर खेल, setters, और अप्रासंगिक क्षेत्रों छोड़े गए) हैजेपीए समग्र प्राथमिक कुंजी

@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Currency { 

    @Id 
    private Integer ix; 
} 

@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Product { 

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
} 

मैं एक वर्ग Price, ऐसी है कि परिभाषित करने की जरूरत है जब DDL is generated from the classes, प्राथमिक संबंधित तालिका की कुंजी Product और Currency के लिए कुंजी से बना है।

@Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@IdClass(PricePK.class) 
public class Price { 

    @Id @ManyToOne(optional = false) 
    private Product product; 

    @Id 
    @ManyToOne(optional = false) 
    private Currency currency; 
} 

@Embeddable 
public class PricePK implements Serializable { 

    Integer product;   
    Integer currency; 
} 

लेकिन इस PRICE तालिका के लिए निम्नलिखित उत्पन्न करता है: मैं निम्नलिखित की कोशिश की है

create table PRICE (
    currency_id int null, 
    product_id int null, 
    primary key (currency_id, product_id) 
); 

सूचना है कि दोनों currency_id और product_id व्यर्थ कर रहे हैं, जो निम्न त्रुटि का कारण बनता है जब मैं लोड करने का प्रयास एसक्यूएल सर्वर में DDL

'मूल्य'

०१२३५१६४१०६ तालिका में व्यर्थ स्तम्भ पर प्राथमिक कुंजी बाधा को परिभाषित नहीं किया जा सकता

मुझे समझ नहीं आता क्यों इन व्यर्थ कर रहे हैं, क्योंकि डोमेन मॉडल में वे एनोटेट @ManyToOne(optional = false)

DDL org.hibernate.dialect.SQLServerDialect एसक्यूएल बोली का उपयोग कर उत्पन्न होता है।

उत्तर

4

हाल ही में मैंने समग्र प्राथमिक कुंजी और एनोटेशन का उपयोग द्वि दिशात्मक @OneToMany के रूप में कई से अधिक संबंध बनाए। यह कोड दोषपूर्ण काम करता है। शायद यह मदद मिलेगी:

Mapping ManyToMany with composite Primary key and Annotation:

0

जब से तुम @IdClass उपयोग कर रहे हैं, PricePK वर्ग @Embeddable एनोटेशन के साथ चिह्नित करने की आवश्यकता नहीं। एक उदाहरण दिया गया है http://www.java2s.com/Code/Java/JPA/SetIdClassforCompoundKey.htm

मैंने कक्षा पर @Embeddable को हटाने और अपने शून्य कोड के साथ MYSQL डेटाबेस में उत्पन्न मूल्य तालिका को हटाने का प्रयास किया। (getters और setters छोड़े गए)

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class Price { 

    @EmbeddedId 
    PricePK pricePk; 
} 

@Embeddable 
public class PricePK implements Serializable { 

    @ManyToOne(optional = false) 
    private Product product; 

    @ManyToOne(optional = false) 
    private Currency currency; 
} 
+0

मैं अपने सुझाव की कोशिश की है, लेकिन यह कोई फर्क नहीं था –

+0

आप उपयोग कर की कोशिश करना चाहेंगे:

के बाद कैसे आप @EmbeddedId का उपयोग आवश्यक परिणाम प्राप्त करने के सकता है '@ एम्बेडेड आईडी' विधि? –

+0

यह दुर्भाग्य से काम नहीं करता था –

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