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

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

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

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

   가져오기 javax.persistence.EmbeddedId; 가져오기 javax.persistence.Entity;

   @Entity public 클래스 EmbeddedEntity {

      @Id private int ID

      @임베디드 개인용 EmbeddableEntity ee;}
   가져오기 javax.persistence.Entity;

   @Entity 공용 클래스 EmbeddableEntity { private int embedField;

      ...}

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

   가져오기 javax.persistence.Embeddable; 가져오기 javax.persistence.Id;

   @Entity public 클래스 EmbeddedEntity {

      @Id private int ID

      @임베디드 개인용 EmbeddableEntity ee;}
   가져오기 javax.persistence.Embeddable;

   @Embeddable 공용 클래스 EmbeddableEntity { private int 필드;

      ...}

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