Vložené třídy musí být anotovány jako vložitelné

Podle specifikace JPA (Java Persistence API) platí, že pokud entita vkládá třídu pomocí anotace Embedded, musí být vložitelná třída anotována s anotací Embeddable, a nikoli anotací Entity. V rozhraní OpenJPA platí, že pokud je atribut anotován s anotací @Embedded, ale odkazovaná třída je anotována s anotací @Entity namísto anotace @Embeddable, rozhraní OpenJPA považuje tuto třídu za vložitelnou vložením této třídy do jiných entit a ošetřením této třídy jako entity vytvořením tabulky pro danou třídu. EclipseLink za těchto okolností generuje výjimku, dokud je třída třídou entity nebo vložitelnou.

Toto pravidlo prochází anotace @Embedded, které odkazují na třídy, které jsou anotovány pomocí @Entity. Pravidlo značí anotace v závislosti na rozsahu procházení a v případě, že jsou nalezeny všechny související třídy.

V tomto příkladu pravidlo značí anotaci @Entity ve třídě EmbeddableEntity.

   import javax.persistence.EmbeddedId; import javax.persistence.Entity;

   @Entity public třída EmbeddedEntity {

      @Id private int id;

      @Embedded private EmbeddableEntity ee;}
   import javax.persistence.Entity;

   @Entity public class EmbeddableEntity { private int embedField;

      ...}

Chcete-li tento problém vyřešit, ručně zkontrolujte použití třídy EmbeddableEntity k ověření, že tento problém není také používán jako třída entity, takže můžete změnit anotaci @Entity na @Embeddable.

   import javax.persistence.Embeddable; import javax.persistence.Id;

   @Entity public třída EmbeddedEntity {

      @Id private int id;

      @Embedded private EmbeddableEntity ee;}
   import javax.persistence.Embeddable;

   @Embeddable public class EmbeddableEntity { private int pole;

      ...}

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í.