Minden egyednek rendelkeznie kell egy elsődleges kulccsal

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.