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 Embeddable osztályokat keres, amelyek tartalmaznak egy Id annotációt, és megjelöli az Id annotációkat attól függően, hogy talál-e egy egyedet, 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
   public class MainEntity {

      @EmbeddedId
      private EmbeddableObject eo;
   }
   import javax.persistence.Embeddable;
   import javax.persistence.Id;
   
   @Embeddable
   public class EmbeddableObject {

      @Id
      private int field;

      ...
   }

A probléma megoldása érdekében a gyorsjavítás eltávolítja az @Id annotációt az import utasításból.

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

   @Entity
   public class MainEntity {

      @EmbeddedId
      private EmbeddableObject eo;
   }
   import javax.persistence.Embeddable;
   
   @Embeddable
   public class EmbeddableObject {

      private int field;

      ...
   }

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.