Встраиваемый класс не должен иметь аннотацию 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 EmbedddableObject eo; }
   import javax.persistence.Embeddable;
   import javax.persistence.Id; @Embeddable
   public class EmbeddableObject {

      @Id
      private int ;

      ... }

Чтобы решить эту проблему, удалите аннотацию @Id и ее импорт.

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

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

      @EmbeddedId
      private EmbedddableObject eo; }
   import javax.persistence.Embeddable; @Embeddable
   public class EmbeddableObject {

      private int ;

      ... }

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