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.
Embedded referenciar uma classe que tenha uma anotação
Entity, a regra sinalizará a anotação Entity na classe
referenciada.
A correção para esse caso depende de se o aplicativo usa essa classe
como uma entidade ou um integrável.
@Entity para uma anotação @Embeddable.@Embedded e remova a anotação
@Embedded.
Embedded estiver em um atributo no qual a classe integrada
não está no escopo da varredura e não puder ser verificada, a anotação
Embedded será sinalizada.
É possível expandir o escopo da análise para incluir classes adicionais e executar novamente
a varredura ou é possível verificar manualmente que a classe integrável está corretamente
anotada.
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.