Integrierbare Klassen dürfen keine ID-Annotation haben, wenn sie von einer Annotation EmbeddedId referenziert werden

Wenn eine Entität ein Attribut mit einer Annotation EmbeddedId definiert, darf die integrierbare Klasse entsprechend der JPA-Spezifikation (Java Persistence API) kein Attribut mit einer Annotation Id enthalten. Wenn sowohl die Annotation EmbeddedId als auch die Annotation Id definiert ist, ignoriert OpenJPA die Annotation Id, wohingegen EclipseLink eine Ausnahme auslöst.

Diese Regel erkennt Embeddable-Klassen, die Attribute mit einer Id-Anmerkung enthalten, dann kennzeichnet die Regel die Id-Anmerkungen je nachdem, ob sie eine Entität findet, die die einbettbare Klasse mit einer EmbeddedId annotation referenziert.

In diesem Beispiel markiert die Regel die Annotation Id in der Klasse 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 öffentliche Klasse EmbeddableObject {

      @Id private int field;

      ...}

Um das Problem zu beheben, entfernen Sie die @Id-Anmerkung und ihren Import.

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

   @Entity public Klasse MainEntity {

      @EmbeddedId privat EmbeddableObject eo;}
   import javax.persistence.Embeddable; @Embeddable public class EmbeddableObject { 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.