A beágyazott osztályok nem rendelkeznek Id annotációval, amikor egy EmbeddedId annotáció hivatkozik rájuk

A Java Persistence API (JPA) specifikáció szerint ha egy egyed meghatároz egy EmbeddedId annotációval rendelkező attribútumot, akkor a beágyazható osztály nem tartalmazhat egy Id annotációval rendelkező attribútumot. Ha az EmbeddedId annotáció és az Id annotáció egyaránt meg van határozva, akkor az OpenJPA figyelmen kívül hagyja az Id annotációt, míg az EclipseLink kivételt dob.

Ez a szabály felismeri azokat a beágyazható osztályokat, amelyek Id annotációval rendelkező attribútumokat tartalmaznak, majd a szabály megjelöli az Id annotációkat attól függően, hogy talál-e olyan entitást, amely a beágyazható osztályra hivatkozik egy EmbeddedId annotáció használatával.

Ebben a példában a szabály megjelöli az Id annotációt az EmbeddableObject osztályban.

   import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity Nyilvános osztály MainEntity {

      @EmbeddedId privát EmbeddableObject eo;}
   import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable nyilvános osztály EmbeddableObject {

      @Id privát int mező;

      ...}

A probléma megoldásához távolítsa el a @Id megjegyzést és az importálást.

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

   @Entity Nyilvános osztály MainEntity {

      @EmbeddedId privát EmbeddableObject eo;}
   import javax.persistence.Embeddable; @Embeddable nyilvános osztály EmbeddableObject { privát int mező;

      ...}

A problémával és más OpenJPA - EclipseLink átállítási problémákkal kapcsolatos információkért tekintse meg az OpenJPA - EclipseLink JPA átállítás: Leképezések útmutatót.