Secondo la specifica JPA (Java Persistence API), se un'entità definisce un attributo con un'annotazione EmbeddedId, la classe incorporabile non può contenere un attributo con un'annotazione Id. Se sono definite sia l'annotazione EmbeddedId che quella Id, OpenJPA ignora l'annotazione Id, mentre EclipseLink genera un'eccezione.
Questa regola individua le classi incorporabili che contengono attributi con l'annotazione Id, quindi la regola contrassegna le annotazioni Id a seconda che trovi un'entità che faccia riferimento alla classe incorporabile usando un attributo EmbeddedId utilizzando un'annotazione Id.
EmbeddedId fa riferimento ad una classe incorporabile che ha un'annotazione Id, la regola contrassegna l'annotazione Id come problema grave. L'annotazione Id dovrà essere rimossa.
EmbeddedId, la regola contrassegna il problema come avvertimento. È possibile espandere l'ambito dell'analisi in modo da includere qualsiasi attributo annotato con EmbeddedId che possa fare riferimento alla classe incorporabile ed eseguire nuovamente la scansione, oppure si può verificare manualmente che nessuna annotazione EmbeddedId faccia riferimento alla classe incorporabile.
In questo esempio, la regola contrassegna l'annotazione Id nella classe EmbeddableObject.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity public class MainEntity { @EmbeddedId privato EmbeddableObject eo;}
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable classe pubblica EmbeddableObject { @Id campo int privato ; ...}
Per risolvere il problema, rimuovere l'annotazione @Id e la sua importazione.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity public class MainEntity { @EmbeddedId privato EmbeddableObject eo;}
Importazione javax.persistence.Embeddable; @Embeddable classe pubblica EmbeddableObject { private int field; ...}
Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.