De acordo com a especificação API de Persistência Java (JPA), se uma entidade define um atributo
com uma anotação EmbeddedId, a classe integrável não pode conter um atributo com uma
anotação Id. Se ambas as anotações EmbeddedId e Id forem
definidas, o OpenJPA ignora a anotação Id, enquanto o EclipseLink lança uma exceção.
Essa regra detecta classes Embeddable que contêm atributos com uma anotação Id, então a regra marca as anotações Id dependendo do fato de encontrar uma entidade que faça referência à classe incorporável usando uma anotação EmbeddedId anotação.
EmbeddedId referencia uma classe integrável que possui uma anotação
Id, a regra sinaliza a anotação Id como um problema grave. A anotação Id precisará ser removida.
EmbeddedId, a regra sinaliza o problema como um aviso. É possível expandir o
escopo da análise para incluir quaisquer atributos anotados com EmbeddedId que podem referenciar a classe integrável e executar a varredura novamente ou é possível verificar manualmente
se nenhuma anotação EmbeddedId referencia a classe integrável.
Neste exemplo, a regra sinaliza a anotação Id na classe EmbeddableObject.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class MainEntity { @EmbeddedId private EmbeddableObject eo;}
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id campo int privado ; ...}
Para resolver o problema, remova a anotação @Id e sua importação.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity public class MainEntity { @EmbeddedId private EmbeddableObject eo;}
Campo import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { 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.