Vložitelné třídy nemohou mít anotaci Id, když je odkazováno anotací EmbeddedId

Podle specifikace JPA (Java Persistence API) platí, že pokud entita definuje atribut s anotací EmbeddedId, vestavitelná třída nemůže obsahovat atribut s anotací Id. Je-li definována anotace EmbeddedId i anotace Id, rozhraní OpenJPA bude ignorovat anotaci Id, zatímco EclipseLink generuje výjimku.

Toto pravidlo prochází a hledá vložitelné třídy, které obsahují atributy s anotací Id. Pravidlo značí anotace Id v závislosti na tom, zda najde entitu, která odkazuje na vložitelnou třídu, pomocí anotace EmbeddedId.

V tomto příkladu pravidlo značí anotaci Id ve třídě 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;

      ...
   }

Chcete-li vyřešit problém, rychlá oprava odebere anotaci @Id a její 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;

      ...
   }

Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.