JPA(Java Persistence API) 스펙에 따라 엔티티가 Embedded 어노테이션을 사용하여
클래스를 임베드하는 경우 임베드 가능 클래스에는 Entity 어노테이션이 아닌
Embeddable 어노테이션이 있어야 합니다.
OpenJPA에서, 속성에 @Embedded 어노테이션이 있지만 참조된 클래스에 @Embeddable 어노테이션이 아닌
@Entity 어노테이션이 있는 경우 OpenJPA는 클래스에 대한 테이블을 작성하여 이 클래스를 엔티티로 처리할 뿐만 아니라
이 클래스를 다른 엔티티에 임베드하여 이 클래스를 임베드 가능으로 처리합니다. 클래스가 엔티티 또는 임베드 가능이 될 수 있으므로 이러한 상황에서 EclipseLink는 예외를 처리합니다.
이 규칙은 @Entity 어노테이션이 있는 클래스를 참조하는 @Embedded
어노테이션에 대해 스캔합니다. 규칙은 스캔 범위에 따라 어노테이션에
플래그를 지정하며 모든 관련 클래스를 찾은 경우 어노테이션을 지정합니다.
Embedded 어노테이션에서 Entity 어노테이션이 있는 엔티티 클래스를 참조하는 경우
규칙은 참조된 클래스에서 Entity 어노테이션에 플래그를 지정합니다.
애플리케이션이 이 클래스를 엔티티로 사용하는지 또는 임베드 가능으로 사용하는지에 따라 이 경우에 대한 수정사항은 달라집니다. @Entity 어노테이션을 @Embeddable 어노테이션으로 변경하십시오.@Embedded 어노테이션을 사용하여 이 클래스를 임베드하는 모든 엔티티를 찾아
@Embedded 어노테이션을 제거하십시오. Embedded 어노테이션이 스캔 범위 내에서 임베디드 클래스를 찾을 수 없고 검증할 수
없는 속성에 있는 경우 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로 마이그레이션: 맵핑 안내서를 참조하십시오.