Az OpenJPA megvalósításban az egyedosztályok meghatározhatók elsődleges
kulcs nélkül is, amely esetben előállításra kerül egy ID nevű
alapértelmezett elsődleges kulcs.
Az EclipseLink megköveteli, hogy az
összes egyedosztálynak legyen egy @Id,
@EmbeddedId vagy @IdClass annotációval
elsődleges kulcsként azonosított attribútuma.
Ez a szabály elemzi az egyedosztályokat, és ellenőrzi, hogy rendelkeznek-e
egy @Id, @EmbeddedId vagy @IdClass
annotációval ellátott attribútummal.
Az ilyen annotációval ellátott attribútumok nélküli osztályok esetén adjon
hozzá egy ID attribútumot, amely az egyedhez az OpenJPA által előállított
oszlopot használja.
Ez a szabály az egyetlen osztályban tartalmazott egyedekre korlátozódik.
Ha az egyedosztály kiterjeszt más egyedosztályokat vagy leképezett
alosztályokat, akkor a szabály nem jelöli meg a hiányzó elsődleges
kulcsokat.
Ezekben az esetekben, ha futási kivételt kap, mint a következő példában,
akkor hiányzik egy elsődleges kulcs:
Kivétel leírása: A(z) [class
org.apache.openjpa.persistence.annotations.EntityA] egyedosztályhoz nincs
megadva elsődleges kulcs.
Meg kell adnia egy @Id, @EmbeddedId vagy egy
@IdClass annotációt.
Ha a következő annotációk egyikével megadott egy
elsődleges kulcsot, akkor győződjön meg róla, hogy nem keverte a
hozzáféréstípusokat (a mezők és a tulajdonságok egyaránt tartalmaznak
annotációt) az egyedosztály hierarchiában.
A következő egyedosztályban a szabály megjelöli az Entity
annotációt.
import javax.persistence.Entity; @Entity public class EntityNoId { } |
Az elsődleges kulcs azonosításához adja hozzá az annotációval ellátott attribútumot.
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.TableGenerator; @Entity public class EntityNoId { @Id @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0") @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE") private int id; } |
Az 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.