Le classi incorporate devono essere annotate come incorporabili

Secondo la specifica JPA (Java Persistence API), se un'entità incorpora una classe utilizzando un'annotazione Embedded, la classe incorporabile deve essere annotata con un'annotazione Embeddable, non un'annotazione Entity. In OpenJPA, quando un attributo viene annotato con l'annotazione @Embedded ma la classe di riferimento è annotata con un'annotazione @Entity invece di un'annotazione @Embeddable, OpenJPA considera questa classe come incorporabile, incorporandola in altre entità oltre a gestirla come un'entità, creando una tabella per la classe. EclipseLink in queste circostanze genera un'eccezione, poiché una classe può essere un entità che un elemento incorporabile.

Questa regola ricerca le annotazioni @Embedded che fanno riferimento a classi che vengono annotate con @Entity. La regola contrassegna le annotazioni a seconda dell'ambito della scansione e se tutte le relative classi vengono trovate.

In questo esempio, la regola contrassegna l'annotazione @Entity nella classe EmbeddableEntity.

   import javax.persistence.EmbeddedId; import javax.persistence.Entity;

   @Entity public class EmbeddedEntity {

      @Id int privato id;

      @Embedded privato EmbeddableEntity ee;}
   importa javax.persistence.Entity;

   @Entity classe pubblica EmbeddableEntity { private int embedField;

      ...}

Per risolvere il problema, esaminare manualmente l'uso della classe EmbeddableEntity per verificare che non sia utilizzata anche come classe di entità, in modo da poter cambiare l'annotazione @Entity in @Embeddable.

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

   @Entity public class EmbeddedEntity {

      @Id int privato id;

      @Embedded privato EmbeddableEntity ee;}
   importa javax.persistence.Embeddable;

   @Embeddable public class EmbeddableEntity { 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.