임베디드 클래스에는 임베드 가능 어노테이션이 있어야 함

JPA(Java Persistence API) 스펙에 따라 엔티티가 Embedded 어노테이션을 사용하여 클래스를 임베드하는 경우 임베드 가능 클래스에는 Entity 어노테이션이 아닌 Embeddable 어노테이션이 있어야 합니다. OpenJPA에서, 속성에 @Embedded 어노테이션이 있지만 참조된 클래스에 @Embeddable 어노테이션이 아닌 @Entity 어노테이션이 있는 경우 OpenJPA는 클래스에 대한 테이블을 작성하여 이 클래스를 엔티티로 처리할 뿐만 아니라 이 클래스를 다른 엔티티에 임베드하여 이 클래스를 임베드 가능으로 처리합니다. 클래스가 엔티티 또는 임베드 가능이 될 수 있으므로 이러한 상황에서 EclipseLink는 예외를 처리합니다.

이 규칙은 @Entity 어노테이션이 있는 클래스를 참조하는 @Embedded 어노테이션에 대해 스캔합니다. 규칙은 스캔 범위에 따라 어노테이션에 플래그를 지정하며 모든 관련 클래스를 찾은 경우 어노테이션을 지정합니다.

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

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

   @Entity
   public class EmbeddedEntity {

      @Id
      private int id;

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

   @Entity
   public class EmbeddableEntity {

      private int embedField;

      ...
   }

이 문제를 해결하려면 EmbeddableEntity 클래스 사용을 수동으로 검사하여 @Entity 어노테이션을 @Embeddable로 변경할 수 있도록 해당 클래스가 엔티티 클래스로도 사용되지 않는지 확인하십시오.

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

   @Entity
   public class EmbeddedEntity {

      @Id
      private int id;

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

   @Embeddable
   public class EmbeddableEntity {

      private int field;

      ...
   }

이 문제 및 기타 OpenJPA에서 EclipseLink로의 마이그레이션 문제에 대한 정보는 OpenJPA에서 EclipseLink JPA로 마이그레이션: 맵핑 안내서를 참조하십시오.