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 realiza un examen en búsqueda de clases Embeddable que contienen atributos con una anotación Id y, después, la regla señala las anotaciones Id en función de si busca una entidad que hace referencia a la clase incorporable utilizando una anotación EmbeddedId.
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. Puede utilizar el arreglo rápido para eliminar la anotación Id.
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 class MainEntity { @EmbeddedId private EmbeddableObject eo; } |
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id private int field; ... } |
Para resolver el problema, el arreglo rápido elimina la anotación @Id y su import.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity public class MainEntity { @EmbeddedId private EmbeddableObject eo; } |
import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { private int field; ... } |
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.