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 prochází a hledá vložitelné třídy, které obsahují atributy s anotací Id. Pravidlo značí anotace Id v závislosti na tom, zda najde entitu, která odkazuje na vložitelnou třídu, pomocí anotace EmbeddedId.
EmbeddedId odkazuje na vložitelnou třídu, která má anotaci Id, pravidlo označí anotaci Id jako závažný problém. K odebrání anotace Id můžete použít rychlou opravu.
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 class MainEntity { @EmbeddedId private EmbeddableObject eo; } |
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id private int field; ... } |
Chcete-li vyřešit problém, rychlá oprava odebere anotaci @Id a její 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; ... } |
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í.