Встраиваемый класс не должен иметь аннотацию Id, если он задан в аннотации EmbeddedId

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

Это правило находит классы Embeddable, содержащие атрибуты с аннотацией Id, и отмечает аннотации Id при наличии сущности, которая ссылается на встраиваемый класс, используя аннотацию EmbeddedId.

В следующем примере правило отметит аннотацию Id в классе 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;

      ...
   }

Для устранения неполадки процедура быстрого исправления удалит аннотацию @Id и соответствующие операторы 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;

      ...
   }

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