Les classes imbriquables ne peuvent pas comporter d'annotation ID lorsqu'elles sont référencées par une annotation EmbeddedId

Selon la spécification JPA (Java Persistence API), si une entité définit un attribut avec une annotation EmbeddedId, la classe imbriquable ne peut pas contenir d'attribut déclaré avec une annotation Id. Si les annotations EmbeddedId et Id sont définies, OpenJPA ignore l'annotation Id, alors qu'EclipseLink génère une exception.

Cette règle détecte les classes intégrables qui contiennent des attributs avec une annotation Id, puis la règle marque les annotations Id selon qu'elle trouve ou non une entité référençant la classe intégrable à l'aide d'une annotation EmbeddedId à l'aide d'une annotation

Dans cet exemple, la règle marque l'annotation Id dans la classe EmbeddableObject.

   import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class MainEntity {

      @EmbeddedId privé EmbeddableObject eo ; }
   import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable classe publique EmbeddableObject {

      @Id zone private int ;

      ... }

Pour résoudre le problème, supprimez l'annotation @Id et son importation.

   import javax.persistence.Embeddable; import javax.persistence.Id;

   @Entity public classe MainEntity {

      @EmbeddedId privé EmbeddableObject eo ; }
   import javax.persistence.Embeddable; @Embeddable classe publique EmbeddableObject { zone private int ;

      ... }

Pour des informations sur ce problème et d'autres problèmes de migration d'OpenJPA vers EclipseLink, voir le guide OpenJPA to EclipseLink JPA Migration: Mappings.