Clasele ce pot fi înglobate nu pot avea o adnotare ID diferită când sunt referite de o adnotare EmbeddedId

Conform specificaţiei Java Persistence API (JPA), dacă o entitate defineşte un atribut cu o adnotare EmbeddedId, clasa înglobabilă nu poate conţine un atribut cu o adnotare Id. Dacă sunt definite ambele adnotări, EmbeddedId şi Id, OpenJPA ignoră adnotarea Id, întrucât EclipseLink aruncă o excepţie.

Această regulă detectează clasele Embeddable care conțin atribute cu o Adnotarea Id, apoi regula marchează adnotările Id în funcție de faptul că găsește sau nu o entitate care face trimitere la clasa încorporabilă folosind o EmbeddedId adnotare.

În acest exemplu, regula semnalează adnotarea Id din clasa EmbeddableObject.

   import javax.persistence.EmbeddedId;
   import javax.persistence.Entity;
   
   @Entity
   public class MainEntity {

      @EmbeddedId
      privat EmbeddableObject eo;
   }
   import javax.persistence.Embeddable;
   import javax.persistence.Id;
   
   @Embeddable
   clasă publică EmbeddableObject {

      @Id
      int privat field;

      ...
   }

Pentru a rezolva problema, eliminați adnotarea @Id și importul acesteia.

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

   @Entity
   public class MainEntity {

      @EmbeddedId
      privat EmbeddableObject eo;
   }
   import javax.persistence.Embeddable;
   
   @Embeddable
   clasă publică EmbeddableObject {

      int privat field;

      ...
   }

Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.