Las clases incorporables no pueden tener una anotación Id si una anotación EmbeddedId hace referencia a estas clases

De acuerdo con la especificación JPA (Java Persistence API), si una entidad define un atributo con una anotación EmbeddedId, la clase incorporable no puede contener un atributo con una anotación Id. Si se definen ambas anotaciones, EmbeddedId e Id, OpenJPA ignora la anotación Id, mientras que EclipseLink lanza una excepción.

Esta regla realiza un examen en búsqueda de clases Embeddable que contienen atributos con una anotación Id y, después, la regla señala las anotaciones Id en función de si busca una entidad que hace referencia a la clase incorporable utilizando una anotación EmbeddedId.

En este ejemplo, la regla señala la anotación Id en la clase EmbeddableObject.

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

      @EmbeddedId
      private EmbeddableObject eo;
   }
   import javax.persistence.Embeddable;
   import javax.persistence.Id;
   
   @Embeddable
   public class EmbeddableObject {

      @Id
      private int field;

      ...
   }

Para resolver el problema, el arreglo rápido elimina la anotación @Id y su import.

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

   @Entity
   public class MainEntity {

      @EmbeddedId
      private EmbeddableObject eo;
   }
   import javax.persistence.Embeddable;
   
   @Embeddable
   public class EmbeddableObject {

      private int field;

      ...
   }

Si desea más información sobre este problema y otros problemas de migración de OpenJPA a EclipseLink, consulte la guía Migración de OpenJPA a EclipseLink JPA: Correlaciones.