De acuerdo con la especificación JPA (Java Persistence API), si una entidad define un atributo con una anotación EmbeddedId, la clase incorporable no puede contener un atributo con una anotación Id. Si se definen ambas anotaciones, EmbeddedId e Id, OpenJPA ignora la anotación Id, mientras que EclipseLink lanza una excepción.
Esta regla detecta las clases incrustables que contienen atributos con una anotación Id, entonces la regla marca las anotaciones Id en función de si encuentra una entidad que haga referencia a la clase incrustable utilizando una anotación EmbeddedId una anotación.
EmbeddedId hace referencia a una clase incorporable que tiene una anotación Id, la regla señala la anotación Id como un problema grave. La anotación Id deberá eliminarse.
EmbeddedId, la regla señala el problema como una advertencia. Puede ampliar el ámbito del análisis para incluir los atributos anotados con EmbeddedId que podrían hacer referencia a la clase incorporable y volver a ejecutar el análisis, o puede verificar manualmente que ninguna anotación EmbeddedId hace referencia a la clase incorporable.
En este ejemplo, la regla señala la anotación Id en la clase EmbeddableObject.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public clase MainEntity { @EmbeddedId privado EmbeddableObject eo;}
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable clase pública EmbeddableObject { @Id private int campo; ...}
Para resolver el problema, elimine la anotación @Id y su importación.
import javax.persistence.Embeddable; importar javax.persistence.Id; @Entity public clase MainEntity { @EmbeddedId privado EmbeddableObject eo;}
import javax.persistence.Embeddable; @Embeddable clase pública EmbeddableObject { 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.