Clasele înglobate trebuie să fie adnotate ca înglobabile

Conform specificaţiei Java Persistence API (JPA), dacă o entitate înglobează o clasă folosind o adnotare Embedded, clasa înglobabilă trebuie să fie adnotată cu o adnotare Embeddable , nu o adnotare Entity . Înn OpenJPA, când un atribut este adnotat cu o adnotare @Embedded dar clasa la care se face referire este adnotată cu o adnotare @Entity în locul unei adnotări @Embeddable, OpenJPA tratează această clasă ca una înglobabilă, prin înglobarea ei în alte entităţi, şi, în acelaşi timp, o tratează ca o entitate prin crearea unui tabel pentru clasă. EclipseLink aruncă o excepţie în aceste circumstanţe, deoarece o clasă poate fi sau o entitate sau o clasă înglobabilă.

Această regulă scanează pentru adnotări @Embedded care fac referinţă la clasele care sunt adnotate cu @Entity. Regula semnalează adnotările în funcţie de domeniul de scanare şi dacă toate clasele înrudite sunt găsite.

În acest exemplu, regula semnalează adnotarea @Entity din clasa EmbeddableEntity.

   import javax.persistence.EmbeddedId;
   import javax.persistence.Entity;

   @Entity
   public class EmbeddedEntity {

      @Id
      int privat id;

      @Embedded
      privat EmbeddableEntity ee;
   }
   import javax.persistence.Entity;

   @Entity
   clasă publică EmbeddableEntity {

      int privat embedField;

      ...
   }

Pentru a rezolva problema, inspectaţi manual utilizarea clasei EmbeddableEntity pentru a verifica faptul că nu este, de asemenea, utilizată ca o clasă entitate pentru ca să puteţi modifica adnotarea @Entity la @Embeddable.

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

   @Entity
   public class EmbeddedEntity {

      @Id
      int privat id;

      @Embedded
      privat EmbeddableEntity ee;
   }
   import javax.persistence.Embeddable;

   @Embeddable
   clasă publică EmbeddableEntity {

      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.