Las clases incorporadas se deben anotar como incorporables

De acuerdo con la especificación JPA (Java Persistence API), si una entidad incorpora una clase utilizando una anotación Embedded, la clases incorporable se debe anotar con una anotación Embeddable, no una anotación Entity. En OpenJPA, cuando un atributo se anota con la anotación @Embedded, pero la clase referenciada se anota con una anotación @Entity en lugar de una anotación @Embeddable, OpenJPA trata esta clase como incorporable incorporando esta clase en otras entidades así como tratando esta clase como una entidad creando una tabla para la clase. En estas circunstancias EclipseLink emite una excepción, ya que una clase puede ser una entidad o una clase incorporable.

Esta regla busca anotaciones @Embedded que hagan referencia a clases que están anotadas con @Entity. La regla señala las anotaciones en función del ámbito de la búsqueda y si se encuentran todas las clases relacionadas.

En este ejemplo, la regla señala la anotación @Entity en la clase EmbeddableEntity.

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

   @Entity public class EmbeddedEntity {

      @Id private int id;

      @Embedded private EmbeddableEntity ee;}
   import javax.persistence.Entity;

   @Entity clase pública EmbeddableEntity { private int embedField;

      ...}

Para resolver el problema, examine manualmente el uso de la clase EmbeddableEntity para verificar que no se utiliza también como clase de entidad, de forma que puede cambiar la anotación @Entity a @Embeddable.

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

   @Entity public class EmbeddedEntity {

      @Id private int id;

      @Embedded private EmbeddableEntity ee;}
   import javax.persistence.Embeddable;

   @Embeddable clase pública EmbeddableEntity { private int campo;

      ...}

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.