Встраиваемые классы должны иметь аннотацию embeddable

В соответствии со спецификацией Java Persistence API (JPA), если сущность встраивает класс с помощью аннотации Embedded, то у встраиваемого класса должна быть аннотация Embeddable, а не Entity. В OpenJPA при наличии атрибута с аннотацией @Embedded, ссылающегося на класс с аннотацией @Entity вместо @Embeddable, этот класс рассматривается как встраиваемый, так как он встраивается в другие сущности, а также как сущность, так как для класса создается таблица. В аналогичном случае EclipseLink генерирует исключительную ситуацию, так как класс может быть либо сущностью, либо встраиваемым классом.

Это правило находит аннотации @Embedded, ссылающиеся на классы, у которых нет аннотации @Entity. Правило отмечает найденные аннотации в зависимости от области проверки и наличия всех связанных классов.

В следующем примере правило отметит аннотацию @Entity в классе EmbeddableEntity.

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

   @Entity
   общедоступный класс EmbeddedEntity {

      @Id
      private int id;

      @Embedded
      private EmbedableEntity ee
   import javax.persistence.Entity;

   @Entity
   public class EmbeddableEntity {

      private int embedField;

      ... }

Для устранения неполадки вручную убедитесь в том, что класс EmbeddableEntity не используется в качестве класса сущности, поэтому можно изменить аннотацию @Entity на @Embeddable.

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

   @Entity
   общедоступный класс EmbeddedEntity {

      @Id
      private int id;

      @Embedded
      private EmbedableEntity ee
   import javax.persistence.Embeddable;

   @Embeddable
   public class EmbeddableEntity {

      private int ;

      ... }

Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.