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 ID int privado ;

      @Embedded private EmbeddableEntity;}
   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 ID int privado ;

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

   Campo @Embeddable public class EmbeddableEntity { private int ;

      ...}

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.