Todas las entidades deben tener una clave primaria

En OpenJPA, las clases de entidad pueden definirse sin una clave primaria, en cuyo caso se genera una clave primaria predeterminada denominada ID. EclipseLink requiere que todas las clases de entidad tengan un atributo que se identifica como la clave primaria utilizando la anotación @Id, @EmbeddedId o @IdClass.

Esta regla explora las clases de entidad y verifica que tienen un atributo anotado con @Id, @EmbeddedId o @IdClass. Para las clases sin estos atributos anotados, añada un atributo ID que utilice la columna generada por OpenJPA para esta entidad. Esta regla se limita a validar las entidades que están contenidas en una clase. Si la clase de entidad amplía otras clases de entidad o superclases correlacionadas, esta regla no marca claves primarias que faltan. En estos casos, si obtiene una excepción de tiempo de ejecución como el ejemplo siguiente, le falta una clave primaria:

Descripción de excepción: Clase de entidad [class.org.apache.openjpa.persistence.annotations.EntityA] no tiene ninguna clave primaria especificada. Debe definir @Id, @EmbeddedId o @IdClass. Si ha definido PK utilizando cualquiera de estas anotaciones, asegúrese de que no tiene tipo de acceso mezclado (campos y propiedades anotadas) en la jerarquía de clases de entidad.

En la clase de entidad siguiente, la anotación Entity se señala con la regla.

import javax.persistence.Entity;

@Entity
public class EntityNoId {

}

Para identificar la clave primaria, añada el atributo anotado.

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

Si desea más información sobre problemas de migración de OpenJPA a EclipseLink, consulte la guía Migración de OpenJPA a EclipseLink JPA: Correlaciones.