Le classi incorporabili non possono avere un'annotazione Id quando vi fa riferimento un'annotazione EmbeddedId

Secondo la specifica JPA (Java Persistence API), se un'entità definisce un attributo con un'annotazione EmbeddedId, la classe incorporabile non può contenere un attributo con un'annotazione Id. Se sono definite sia l'annotazione EmbeddedId che quella Id, OpenJPA ignora l'annotazione Id, mentre EclipseLink genera un'eccezione.

Questa regola individua le classi incorporabili che contengono attributi con l'annotazione Id, quindi la regola contrassegna le annotazioni Id a seconda che trovi un'entità che faccia riferimento alla classe incorporabile usando un attributo EmbeddedId utilizzando un'annotazione Id.

In questo esempio, la regola contrassegna l'annotazione Id nella classe EmbeddableObject.

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

      @EmbeddedId privato EmbeddableObject eo;}
   import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable classe pubblica EmbeddableObject {

      @Id campo int privato ;

      ...}

Per risolvere il problema, rimuovere l'annotazione @Id e la sua importazione.

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

   @Entity public class MainEntity {

      @EmbeddedId privato EmbeddableObject eo;}
   Importazione javax.persistence.Embeddable; @Embeddable classe pubblica EmbeddableObject { private int field;

      ...}

Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.