Conform specificaţiei Java Persistence API (JPA), dacă o entitate defineşte un atribut
cu o adnotare EmbeddedId, clasa înglobabilă nu poate conţine un atribut
cu o adnotare Id. Dacă sunt definite ambele adnotări, EmbeddedId şi
Id, OpenJPA ignoră adnotarea Id,
întrucât EclipseLink aruncă o excepţie.
Această regulă scanează pentru clasele Embeddable care conţin atribute cu o adnotare
Id, apoi regula semnalează adnotările Id
dacă găseşte o entitate care face referire la o clasă înglobabilă utilizând o adnotare
EmbeddedId.
EmbeddedId face referire la o clasă înglobabilă care are o adnotare Id,
regula semnalează adnotarea Id ca o problemă gravă. Puteţi folosi corecţia rapidă
pentru a înlătura adnotarea Id.
EmbeddedId, regula
semnalează problema ca un avertisment. Puteţi să extindeţi domeniul de analiză pentru a include orice atribute adnotate cu
EmbeddedId care ar putea referi clasa înglobabilă şi să rulaţi din nou scanarea sau puteţi să verificaţi manual că nicio adnotare
EmbeddedId nu face referire la clasa înglobată.
În acest exemplu, regula semnalează adnotarea Id din clasa 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; ... } |
Pentru a rezolva problema, corecţia rapidă înlătură adnotarea @Id şi import a sa.
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; ... } |
Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.