Toutes les entités doivent posséder une clé primaire

Dans OpenJPA, les classes entité peuvent être définies sans clé primaire, auquel cas une clé primaire par défaut nommée ID est générée. EclipseLink requiert que toutes les classes entité aient un attribut identifié comme clé primaire à l'aide de l'annotation @Id, @EmbeddedId ou @IdClass.

Cette règle analyse les classes entité et vérifient qu'elles comportent un attribut annoté avec @Id, @EmbeddedId ou @IdClass. Pour les classes dépourvues de ces attributs annotés, ajoutez un attribut ID qui utilise la colonne générée par OpenJPA pour cette entité. Cette règle se limité à valider les entités contenues dans une seule classe. Si la classe entité étend d'autres classes entité ou des superclasses mappées, la règle ne marque pas les clés primaires manquantes. Dans ces cas, si vous rencontrez une exception en phase d'exécution, comme dans l'exemple suivant, ceci dénote une clé primaire manquante :

Description de l'exception : La classe entité [class org.apache.openjpa.persistence.annotations.EntityA] n'a pas de clé primaire définie. Elle doit définir un élément @Id, @EmbeddedId ou @IdClass. Si vous avez défini la clé primaire à l'aide de l'une de ces annotations, assurez-vous que vous n'opérez pas en mode d'accès mixte (zones et propriétés annotées) dans votre hiérarchie de classe entité.

Dans la classe entité suivante, l'annotation Entity est signalée par la règle.

import javax.persistence.Entity;

@Entity
public class EntityNoId {

}

Pour identifier la clé primaire, ajoutez l'attribut annoté.

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

Pour des informations sur les problèmes de migration d'OpenJPA vers EclipseLink, voir le guide OpenJPA to EclipseLink JPA Migration: Mappings.