Bonjour à tous,

Voila, depuis quelque temps je me casse la tête sur un problème .
Le mieux étant de vous montrer un code épuré.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
@Entity
public class A implements Serializable {
 
	@Id
        @JoinColumn(name="c1")
	private String c1;
 
        ...
}
 
@Entity
public class B implements Serializable {
 
	@Id
        @JoinColumn(name="c3")
	private String c3;
 
	@Id
        @JoinColumn(name="c4")
	private String c4;
 
        ...
}
Jusque la tout va bien. Je voudrais maintenant la classe C suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
@Entity
public class C implements Serializable {
 
	@Id
        @JoinColumn(name="c5")
	private A c5;
 
	@Id
	@JoinColumns({
            @JoinColumn(name="c6", referencedColumnName="c3"),
            @JoinColumn(name="c7", referencedColumnName="c4")
	})
	private B c6;
 
        ...
}
En écrivant ce code j'ai les logs suivants

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
cannot Deploy CalinfoERP
Deployment Error for module: CalinfoERP: Exception while preparing the app : org.glassfish.deployment.common.DeploymentException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [EJB] failed.
Internal Exception: java.lang.ClassCastException: org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.IdAccessor cannot be cast to org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ObjectAccessor
Exception while invoking class org.glassfish.persistence.jpa.JPADeployer prepare method : javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [EJB] failed.
Internal Exception: java.lang.ClassCastException: org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.IdAccessor cannot be cast to org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.ObjectAccessor
Si je retire le @Id sur c6, ca fonctionne correctement, seulement voila, les clés primaires ne sont pas correctes. De plus, je suis obligé d'avoir cette classe pour pouvoir avoir les méthodes getC5 et getC6.

Quelqu'un aurait il une solution ?

Thank's