Tutte le entità devono avere una chiave primaria

In OpenJPA, le classi di entità possono essere definite senza una chiave primaria, nel qual caso viene generata una chiave primaria predefinita denominato ID. EclipseLink richiede che tutte le classi entità abbiano un attributo identificato come chiave primaria che utilizzi l'annotazione @Id, @EmbeddedId o @IdClass.

Questa regola analizza le classi di entità e verifica che abbiano un attributo annotato con @Id, @EmbeddedId o @IdClass. Per le classi senza questi attributi di annotazione, è necessario aggiungere un attributo ID che utilizzi la colonna generata da OpenJPA per questa entità. Questa regola è limitata alle entità di convalida contenute in una classe. Se la classe di entità estende altre classi di entità o superclassi associate, questa regola non contrassegnerà le chiavi primarie mancanti. In questi casi, se si riceve un'eccezione di runtime come quella nel seguente esempio, manca una chiave primaria:

Exception Description: Entity class [class org.apache.openjpa.persistence.annotations.EntityA] has no primary key specified. It should define either an @Id, @EmbeddedId or an @IdClass. If you have defined PK using any of these annotations then make sure that you do not have mixed access-type (both fields and properties annotated) in your entity class hierarchy.

Nella classe di entità seguente, l'annotazione Entity viene contrassegnata dalla regola.

import javax.persistence.Entity;

@Entity
public class EntityNoId {

}

Per identificare la chiave primaria, aggiungere l'attributo annotato.

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;
}

Per informazioni sui problemi di migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.