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 detekuje třídy Embeddable, které obsahují atributy se znakem Id, pak toto pravidlo označí anotace Id v závislosti na tom, zda najde entitu, která odkazuje na vložitelnou třídu pomocí příznaku EmbeddedId anotaci.

V tomto příkladu pravidlo značí anotaci Id ve třídě EmbeddableObject.

   import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public třída MainEntity {

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

      Pole @Id private int ;

      ...}

Problém vyřešíte odstraněním anotace @Id a jejího importu.

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

   @Entity public třída MainEntity {

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

      ...}

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í.