EmbeddedId 어노테이션에서 참조하는 경우 임베드 가능 클래스에 ID 어노테이션이 있을 수 없음

JPA(Java Persistence API) 스펙에 따라 엔티티가 EmbeddedId 어노테이션이 있는 속성을 정의하는 경우 임베드 가능 클래스에는 Id 어노테이션이 있는 속성이 포함될 수 없습니다. EmbeddedId 어노테이션 및 Id 어노테이션을 둘 다 정의하는 경우 OpenJPA는 Id 어노테이션을 무시하지만 EclipseLink에서는 예외 처리합니다.

이 규칙은 Id 어노테이션이 있는 속성이 포함된 Embeddable 클래스에 대해 스캔한 다음 EmbeddedId 어노테이션을 사용하여 임베드 가능 클래스를 참조하는 엔티티를 찾는지 여부에 따라 Id 어노테이션에 플래그를 지정합니다.

이 예제에서 규칙은 EmbeddableObject 클래스의 Id 어노테이션에 플래그를 지정합니다.

   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로 마이그레이션: 맵핑 안내서를 참조하십시오.