Toate entităţile trebuie să aibă o cheie primară

În OpenJPA, clasele entitate pot fi definite fără o cheie primară, caz în care o cheie primară implicită numită ID este generată. EclipseLink necesită ca toate clasele entitate să aibă un atribut care este identificat ca cheie primară utilizând adnotarea @Id, @EmbeddedId sau @IdClass.

Această regulă scanează clasele entitate şi verifică dacă au un atribut adnotat cu @Id, @EmbeddedId sau @IdClass. Pentru clasele fără aceste atribute adnotate, adăugaţi un ID atribut care foloseşte coloana generată de OpenJPA pentru această entitate. Această regulă este restricţionată pentru entităţile validate care sunt conţinute într-o singură clasă. Dacă clasa entitate extinde alte clase entitate sau superclase mapate, această regulă nu semnalează cheile primare lipsă. În aceste cazuri, dacă primiţi o excepţie runtime, cum ar fi următorul exemplu, lipseşte o cheie primară:

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.

În următoarea clasă entitate, adnotarea Entity este semnalată de regulă.

import javax.persistence.Entity;

@Entity
public class EntityNoId {

}

Petru a identifica cheia primară, adăugaţi atributul adnotat.

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

Pentru informaţii despre problemele migrării OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.