A Java Persistence API (JPA) specifikáció szerint, ha egy egyed beágyaz
egy osztályt az Embedded annotáció használatával, akkor a
beágyazható osztályt egy Embeddable annotációval kell
ellátni, és nem egy Entity annotációval.
Az OpenJPA megvalósításban, amikor egy attribútum meg van jelölve az
@Embedded annotációval, azonban a hivatkozott osztály
@Entity annotációval van megjelölve az
@Embeddable annotáció helyett, akkor az
OpenJPA ezt az osztályt beágyazhatóként kezeli az osztály beágyazásával
más egyedekbe, valamint az osztályt egyedként kezeli, és létrehoz egy
táblát az osztály számára.
Az EclipseLink kivételt dob ebben a helyzetben, mivel egy osztály
vagy egyed lehet, vagy beágyazható.
Ez a szabály olyan @Embedded annotációkat keres,
amelyek @Entity annotációval megjelölt osztályokra
hivatkoznak. A szabály az annotációkat az elemzés hatókörétől függően
jelöli meg, illetve attól függően, hogy az összes kapcsolódó osztályt
megtalálja-e.
Embedded annotáció egy Entity
annotációval rendelkező osztályra hivatkozik, akkor a szabály megjelöli az
Entity annotációt a hivatkozott osztályban.
Az ilyen esetek javítása attól függ, hogy az alkalmazás ezt az osztályt
egyedként vagy beágyazhatóként használja-e.
@Entity annotációt egy @Embeddable
annotációra.@Embedded annotációval beágyazó összes
egyedet, és távolítsa el az @Embedded annotációt.
Embedded annotáció,
amikor az elemzés hatókörén belül nem található beágyazott osztály és az
ellenőrzés nem végezhető el, akkor a szabály megjelöli az
Embedded annotációt.
Az elemzés hatókörét kiterjesztheti, hogy további osztályokat foglaljon
magába és újrafuttathatja az elemzést, vagy kézzel ellenőrizheti, hogy a
beágyazható osztály helyesen van-e ellátva annotációval.
Ebben a példában a szabály megjelöli az @Entity annotációt az
EmbeddableEntity osztályban.
import javax.persistence.EmbeddedId; import javax.persistence.Entity; @Entity nyilvános osztály EmbeddedEntity { @Id privát int azonosító; @Embedded privát EmbeddableEntity ee;}
import javax.persistence.Entity; @Entity nyilvános osztály EmbeddableEntity { privát int beágyazás ...}
A probléma megoldása érdekében kézzel vizsgálja meg az
EmbeddableEntity osztály használatát annak ellenőrzéséhez,
hogy az nincs-e haszálnatban egyedosztályként is, hogy mdóosíthassa az
@Entity annotációt @Embeddable annotációra.
import javax.persistence.Embeddable; import javax.persistence.Id; @Entity nyilvános osztály EmbeddedEntity { @Id privát int azonosító; @Embedded privát EmbeddableEntity ee;}
import javax.persistence.Embeddable; @Embeddable nyilvános osztály EmbeddableEntity { privát int mező; ...}
A problémával és más OpenJPA - EclipseLink átállítási problémákkal kapcsolatos információkért tekintse meg az OpenJPA - EclipseLink JPA átállítás: Leképezések útmutatót.