2013-03-26 5 views
6

मेरे आईडी वर्ग लागू करने के लिए विफल रहता है,बाद composit प्राथमिक कुंजी के साथ इकाई के भंडारण के लिए @IdClass का उपयोग करना है, लेकिन इस प्रकार

public class EmployeeId implements Serializable{ 
    public EmployeeId(){} 
    public EmployeeId(Integer id, String country){ 
     this.id = id; 
     this.country = country; 
    } 

    private Integer id; 
    private String country; 

    @Override 
    public int hashCode(){   
     return this.getCountry().hashCode() + getId(); 
    } 

    @Override 
    public boolean equals(Object o){ 
     boolean flag = false; 
     EmployeeId myId = (EmployeeId) o; 

     if((o instanceof EmployeeId) 
       && (this.getCountry().equals(myId.getCountry())) 
       && (this.id == myId.getId())){ 
      flag = true; 
     } 
     return flag; 
    } 
// rest of the code with getters only 
} 

@Entity 
@IdClass(EmployeeId.class) 
@Table(name="TBL_EMPLOYEE_FOUR") 
public class EmployeeEntityTwo { 

    public EmployeeEntityTwo(){} 
    public EmployeeEntityTwo(Integer id,String country, String empName){ 
     this.country = country; 
     this.employeeId = id; 
     this.empName = empName; 
    } 

    @Id 
    @Column(name="ID") 
    private Integer employeeId; 

    @Id 
    @Column(name="COUNTRY",length=50) 
    private String country; 

    @Column(name="NAME",length=50) 
    private String empName; 
// getters and setters 
} 

का उपयोग कर यह मेरी मेज

है मेरी इकाई है
create table TBL_EMPLOYEE_FOUR(
    ID integer, 
    COUNTRY varchar(50), 
    NAME varchar(50), 
    constraint PK_EMP_00239 primary key(ID,COUNTRY) 
) 

यही वह है जिसे मैं

चलाने की कोशिश कर रहा हूं
private static void idClassStore(EntityManager em) throws Exception{ 
    List<EmployeeEntityTwo> employees = Arrays.asList(new EmployeeEntityTwo(12, "KENYA", "Ridushi Ogambe"), 
                 new EmployeeEntityTwo(13, "GHANA", "Mikila Hanza"), 
                 new EmployeeEntityTwo(14, "EGYPT", "Abdul Hameed Fagdaul"), 
                 new EmployeeEntityTwo(15, "MOROCCO", "Jamil Mahmoud"), 
                 new EmployeeEntityTwo(16, "LIBERIA", "Robert Damus")); 

    for(EmployeeEntityTwo employee : employees){ 
     em.persist(employee);    
     } 
} 

लेकिन मैं एक अपवाद

Caused by: org.hibernate.AnnotationException: Property of @IdClass not found in entity com.entities.EmployeeEntityTwo: id 

के रूप में मैं दृढ़ता प्रदाता के रूप में हाइबरनेट साथ जेपीए उपयोग कर रहा हूँ,

लेकिन @IdClass जो मैं का इस्तेमाल किया है आयात javax.persistence.IdClass की है मिलता है,

इसलिए जहां गलत जा रहा हूँ है,

उत्तर

11

मैं समाधान की खोज की है:

'आईडी' फ़ील्ड कक्षाएं EmployeeEntityTwo और EmployeeId में ही होना चाहिए।

// EmployeeId.java; 
private Integer id; 

// EmployeeId.java; 
private Integer employeeId; 

मैं गेटर क्रमशः समायोजित किया जाना चाहिए, और यह काम किया।


javax.persistence.IdClass से Javadocs:

क्षेत्रों या प्राथमिक कुंजी कक्षा में गुण और प्राथमिक कुंजी फ़ील्ड या संस्था के गुणों के नाम के अनुरूप होना चाहिए और उनके प्रकारों ही होना चाहिए।

+0

अपने उत्तर के बगल में स्थित चेकमार्क को दबाएं, ताकि यह स्पष्ट हो गया कि इस प्रश्न का उत्तर दिया गया है। – sharakan

+0

मैं नहीं कर सकता, यह कहता है कि मैं दो दिनों के बाद अपने प्रश्न का उत्तर दे सकता हूं –

+0

मुझे एक ही त्रुटि मिली। त्रुटि संदेश वास्तविक समस्या से मेल नहीं खाता है। बहुत अस्पष्ट –

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