Je dois créer sur la clé primaire composite qui aura une clé étrangère ComponentMarks Classe:clé primaire composite avec 1 JPA clé étrangère, TopLink
@IdClass(SubQuesCompIDs.class)
@Entity
@Table(name="component_marks")
public class ComponentMarks {
@Id
private String component_ID;
@Id
private String question_ID;
@Id
@ManyToOne(targetEntity=ConsolidatedMarks.class)
@JoinColumn(name="submission_unique_ID", referencedColumnName="submission_unique_ID")
private ConsolidatedMarks consolidatedMarks;
//***********getters and setters***********
}
SubQuesCompIDs Classe:
public class SubQuesCompIDs implements Serializable{
private ConsolidatedMarks consolidatedMarks;
private String component_ID;
private String question_ID;
/****************getters and setter************/
}
ConsolidatedMarks classe :
public class ConsolidatedMarks {
@Id
private String submission_unique_ID;
/****************getters and setter************/
}
erreur:
Internal Exception: javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: predeploy for PersistenceUnit [RDEVAL_MySQL_DB] failed.
Internal Exception: Exception [TOPLINK-7150] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
Exception Description: Invalid composite primary key specification. The names of the primary key fields or properties in the primary key class [com.eta.entityBeans.SubQuesCompIDs] and those of the entity bean class [class com.eta.entityBeans.ComponentMarks] must correspond and their types must be the same. Also, ensure that you have specified id elements for the corresponding attributes in XML and/or an @Id on the corresponding fields or properties of the entity class.
java.lang.Exception:
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: WebappClassLoader
context: /ProjectName **
delegate: false
----------> Parent Classloader:
[email protected]
Internal Exception: javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
Exception Description: predeploy for PersistenceUnit [RDEVAL_MySQL_DB] failed.
Internal Exception: Exception [TOPLINK-7150] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
Exception Description: Invalid composite primary key specification. The names of the primary key fields or properties in the primary key class [com.eta.entityBeans.SubQuesCompIDs] and those of the entity bean class [class com.eta.entityBeans.ComponentMarks] must correspond and their types must be the same. Also, ensure that you have specified id elements for the corresponding attributes in XML and/or an @Id on the corresponding fields or properties of the entity class.
et aussi dans la classe java "ComponentMarks" à "@IdClass (SubQuesCompIDs.class)", il montrait cette compilation message d'erreur:
The attribute matching the ID class attribute consolidatedMarks does not have the correct type com.eta.entityBeans.ConsolidatedMarks
ConsolidatedMarks est du paquet com.eta.entityBeans.
Mise à jour ComponentMarks:
@Entity
@Table(name="component_marks")
@IdClass(SubQuesCompIDs.class)
public class ComponentMarks {
@Id
private String component_ID;
@Id
private String question_ID;
@Id
@Column(name="submission_unique_ID")
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="submission_unique_ID")
private ConsolidatedMarks consolidatedMarks;
/****************getters and setter************/
}
SubQuesCompIDs mise à jour:
public class SubQuesCompIDs implements Serializable{
private String consolidatedMarks;
private String component_ID;
private String question_ID;
/****************getters and setter************/
}
maintenant la deuxième erreur qui est une erreur de compilation n'est pas comming.
Merci d'avoir répondu. J'ai modifié mon code en fonction de vos sugeessions mais j'ai la même erreur ' " Spécification de clé primaire composite non valide Les noms des champs de clé primaire ou des propriétés dans la classe de clé primaire [com.eta.entityBeans.SubQuesCompIDs] et ceux de la classe bean entité [classe com.eta.entityBeans.ComponentMarks] doit correspondre et leurs types doivent être identiques.Aussi, assurez-vous que vous avez spécifié des éléments id pour les attributs correspondants en XML et/ou un @Id sur les champs correspondants ou les propriétés de la classe d'entité "' –
J'ajoute aussi mon code de création de table. CREATE TABLE 'component_marks' ( \t' submission_unique_ID' VARCHAR (50) NOT NULL, \t 'component_ID' VARCHAR (30) NOT NULL, \t' question_ID' VARCHAR (30) NOT NULL); –
Je ne suis pas sûr que cela provoque l'erreur, mais vous ne devriez pas avoir l'annotation '@Column (name =" submission_unique_ID ")' sur le champ 'consolidatedMarks'. –