Classes integradas devem ser anotadas como integráveis

De acordo com a especificação API de Persistência Java (JPA), se uma entidade integra uma classe usando uma anotação Embedded, a classe integrável deve ser anotada com uma anotação Embeddable, não uma anotação Entity. No OpenJPA, quando um atributo é anotado com a anotação @Embedded, mas a classe referenciada é anotada com uma anotação @Entity, em vez de uma anotação @Embeddable, o OpenJPA trata essa classe como integrável, integrando-a em outras entidades e também tratando-a como uma entidade, criando uma tabela para a classe. O EclipseLink lança uma exceção nessas circunstâncias desde que uma classe possa ser uma entidade ou um integrável.

Esta regra faz a varredura para encontrar anotações @Embedded que referenciam classes que são anotadas com @Entity. A regra sinaliza anotações dependendo do escopo da varredura e se todas as classes relacionadas foram localizadas.

Neste exemplo, a regra sinaliza a anotação @Entity na classe 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
   public class EmbeddableEntity {

      private int embedField;

      ...
   }

Para resolver o problema, inspecione manualmente o uso da classe EmbeddableEntity para verificar se ele também não é usado como uma classe de entidade de forma que você possa alterar a anotação @Entity para @Embeddable.

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

   @Entity
   public class EmbeddedEntity {

      @Id
      private int id;

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

   @Embeddable
   public class EmbeddableEntity {

      private int field;

      ...
   }

Para obter informações sobre esse problema e outros problemas de migração do OpenJPA para o EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: mapeamentos.