Podle specifikace JPA (Java Persistence API) platí, že pokud entita definuje atribut s anotací EmbeddedId, vestavitelná třída nemůže obsahovat atribut s anotací Id. Je-li definována anotace EmbeddedId i anotace Id, rozhraní OpenJPA bude ignorovat anotaci Id, zatímco EclipseLink generuje výjimku.
Toto pravidlo detekuje třídy Embeddable, které obsahují atributy se znakem Id, pak toto pravidlo označí anotace Id v závislosti na tom, zda najde entitu, která odkazuje na vložitelnou třídu pomocí příznaku EmbeddedId anotaci.
EmbeddedId odkazuje na vložitelnou třídu, která má anotaci Id, pravidlo označí anotaci Id jako závažný problém. Anotace Id bude třeba odstranit.
EmbeddedId, pravidlo označí daný problém jako varování. Rozbalením rozsahu analýzy můžete zahrnout všechny atributy anotované pomocí EmbeddedId, které by mohly odkazovat na vložitelnou třídu, a znovu spustit skenování, nebo můžete ručně ověřit, že žádné anotace EmbeddedId neodkazují na vložitelnou třídu.
V tomto příkladu pravidlo značí anotaci Id ve třídě EmbeddableObject.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public třída MainEntity { @EmbeddedId private EmbeddableObject eo;}
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { Pole @Id private int ; ...}
Problém vyřešíte odstraněním anotace @Id a jejího importu.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity public třída MainEntity { @EmbeddedId private EmbeddableObject eo;}
import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { private int ; ...}
Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.