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 sucht nach Embeddable-Klassen, die Attribute mit einer
Id-Annotation enthalten, und markiert dann die Id-Annotationen abhängig davon, ob sie eine Entität findet, die die integrierbare
Klasse mit einer Annotation EmbeddedId referenziert.
EmbeddedId-Annotation eine integrierbare Klasse referenziert, die eine Annotation
Id
hat, markiert die Regel die Id-Annotation als schwerwiegendes Problem. Mit der Schnellkorrektur
können Sie die Annotation Id entfernen.
EmbeddedId findet, markiert die Regel das Problem als Warnung. Sie können den Umfang der Analyse auf Attribute erweitern,
die mit EmbeddedId annotiert sind und auf die integrierbare Klasse verweisen könnten,
und den Scan erneut ausführen oder Sie können manuell sicherstellen, dass die integrierbare Klasse nicht von EmbeddedId-Annotationen referenziert wird.
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 private EmbeddableObject eo; } |
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id private int field; ... } |
Zur Behebung des Problems entfernt die Schnellkorrektur die Annotation @Id und die zugehörige Anweisung import.
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; ... } |
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.