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 ricerca le classi Embeddable che contengono attributi con un'annotazione Id, quind i la regola contrassegna le annotazioni Id a seconda che trovi un'entità che fa riferimento alla classe incorporabile che utilizza l'annotazione EmbeddedId.
EmbeddedId fa riferimento ad una classe incorporabile che ha un'annotazione Id, la regola contrassegna l'annotazione Id come problema grave. È possibile utilizzare la correzione rapida per rimuovere l'annotazione Id.
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 private EmbeddableObject eo; } |
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable public class EmbeddableObject { @Id private int field; ... } |
Per risolvere il problema, la correzione rapida rimuove l'annotazione @Id ed il relativo 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; ... } |
Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.