Integrierte Klassen müssen als embeddable annotiert werden

Wenn eine Entität eine Klasse mit einer Annotation Embedded integriert, muss die integrierbare Klasse entsprechend der JPA-Spezifikation (Java Persistence API) mit einer Annotation Embeddable und nicht mit einer Annotation Entity annotiert werden. Wenn in OpenJPA ein Attribut mit der Annotation @Embedded annotiert ist, aber die referenzierte Klasse mit einer Annotation @Entity und nicht mit einer Annotation @Embeddable, behandelt OpenJPA diese Klasse als integrierbar, indem diese Klasse sowohl in andere Entitäten integriert wird, als auch wie eine Entität behandelt wird, indem eine Tabelle für die Klasse erstellt wird. EclipseLink löst unter diesen Umständen eine Ausnahme aus, da eine Klasse entweder eine Entität oder integrierbar sein kann.

Diese Regel sucht nach @Embedded-Annotationen, die mit @Entity annotierte Klassen referenzieren. Die Regel markiert Annotationen in Abhängigkeit vom Umfang des Scans und abhängig davon, ob alle zugehörigen Klassen gefunden werden.

In diesem Beispiel markiert die Regeln die Annotation @Entity in der Klasse EmbeddableEntity.

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

   @Entity public Klasse EmbeddedEntity {

      @Id private int id;

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

   @Entity öffentliche Klasse EmbeddableEntity { private int embedField;

      ...}

Zur Behebung des Problems überprüfen Sie die Verwendung der Klasse EmbeddableEntity manuell, um sicherzustellen, dass sie nicht auch als Entitätsklasse verwendet wird, damit Sie die Annotation @Entity in eine Annotation @Embeddable ändern können.

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

   @Entity public Klasse EmbeddedEntity {

      @Id private int id;

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

   @Embeddable public class EmbeddableEntity { private int field;

      ...}

Informationen zu diesem Problem und zu weiteren Problemen bei der Migration von OpenJPA auf EclipseLink finden Sie in der Veröffentlichung OpenJPA to EclipseLink JPA Migration: Mappings.