JPA(Java Persistence API) 스펙에 따라 엔티티가 EmbeddedId 어노테이션이 있는
속성을 정의하는 경우 임베드 가능 클래스에는 Id 어노테이션이 있는
속성이 포함될 수 없습니다. EmbeddedId 어노테이션 및
Id 어노테이션을 둘 다 정의하는 경우 OpenJPA는 Id 어노테이션을 무시하지만
EclipseLink에서는 예외 처리합니다.
이 규칙은 어트리뷰트가 포함된 임베더블 클래스를 감지합니다 Id 어노테이션이 있는 속성을 포함하는 임베더블 클래스를 감지한 다음, 규칙은 Id 어노테이션에 플래그를 지정합니다 를 사용하여 임베더블 클래스를 참조하는 엔티티를 찾았는지 여부에 따라 EmbeddedId 어노테이션을 사용하는 엔티티를 찾는지 여부에 따라 플래그를 지정합니다.
EmbeddedId 어노테이션에서 Id 어노테이션이 있는 임베드 가능 클래스를 참조하는
경우 규칙은 Id 어노테이션을 심각한 문제로 플래그 지정합니다. Id 어노테이션 를 제거해야 합니다.
EmbeddedId 어노테이션을 사용하여 엔티티에서 참조를 찾지 못하는 경우 규칙은 문제를 경고로
플래그 지정합니다. 분석 범위를 확장하여 임베드 가능 클래스를 참조할 수 있는 EmbeddedId
어노테이션이 있는 속성을 포함시키고 스캔을 다시 실행하거나 임베드 가능 클래스를 참조하는
EmbeddedId 어노테이션이 없는지 수동으로 확인할 수 있습니다.
이 예제에서 규칙은 EmbeddableObject 클래스의 Id 어노테이션에 플래그를
지정합니다.
가져오기 javax.persistence.EmbeddedId; 가져오기 javax.persistence.Entity; @Entity public 클래스 MainEntity { @EmbeddedId 개인용 EmbeddableObject eo;}
가져오기 javax.persistence.Embeddable; 가져오기 javax.persistence.Id; @Embeddable 공용 클래스 EmbeddableObject { @Id private int 필드; ...}
이 문제를 해결하려면 @Id 어노테이션과 해당 가져오기를 제거하세요.
가져오기 javax.persistence.Embeddable; 가져오기 javax.persistence.Id; @Entity public 클래스 MainEntity { @EmbeddedId 개인용 EmbeddableObject eo;}
가져오기 javax.persistence.Embeddable; @Embeddable 공용 클래스 EmbeddableObject { private int 필드; ...}
이 문제 및 기타 OpenJPA에서 EclipseLink로의 마이그레이션 문제에 대한 정보는 OpenJPA에서 EclipseLink JPA로 마이그레이션: 맵핑 안내서를 참조하십시오.