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

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

이 규칙은 어트리뷰트가 포함된 임베더블 클래스를 감지합니다 Id 어노테이션이 있는 속성을 포함하는 임베더블 클래스를 감지한 다음, 규칙은 Id 어노테이션에 플래그를 지정합니다 를 사용하여 임베더블 클래스를 참조하는 엔티티를 찾았는지 여부에 따라 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로 마이그레이션: 맵핑 안내서를 참조하십시오.