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ă detectează clasele Embeddable care conțin atribute cu o Adnotarea Id, apoi regula marchează adnotările Id în funcție de faptul că găsește sau nu o entitate care face trimitere la clasa încorporabilă folosind o EmbeddedId adnotare.
EmbeddedId face referire la o clasă înglobabilă care are o adnotare Id,
regula semnalează adnotarea Id ca o problemă gravă. Adnotarea Id va trebui să fie eliminată.
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 privat EmbeddableObject eo; }
import javax.persistence.Embeddable; import javax.persistence.Id; @Embeddable clasă publică EmbeddableObject { @Id int privat field; ... }
Pentru a rezolva problema, eliminați adnotarea @Id și importul acesteia.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity public class MainEntity { @EmbeddedId privat EmbeddableObject eo; }
import javax.persistence.Embeddable; @Embeddable clasă publică EmbeddableObject { int privat 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.