Todas as entidades devem ter uma chave primária

No OpenJPA, as classes de entidade podem ser definidas sem uma chave primária, em cujo caso uma chave primária padrão chamada ID é gerada. O EclipseLink requer que todas as classes de entidade tenham um atributo identificado como a chave primária usando a anotação @Id, @EmbeddedId ou @IdClass.

Essa regra varre as classes de entidade e verifica se elas possuem um atributo anotado com @Id, @EmbeddedId ou @IdClass. Para classes sem esses atributos anotados, inclua um atributo do id que use a coluna gerada por OpenJPA para essa entidade. Essa regra é restrita à validação de entidades que estão contidas em uma classe. Se a classe de entidade estender outras classes de entidade ou superclasses mapeadas, essa regra não sinalizará chaves primárias ausentes. Nestes casos, se você obtiver uma exceção de tempo de execução, como o exemplo a seguir, uma chave primária está ausente:

Descrição de exceção: a classe de entidade [classe org.apache.openjpa.persistence.annotations.EntityA] não possui chave primária especificada. Ela deve definir um @Id, @EmbeddedId ou @IdClass. Se você tiver definido um PK usando qualquer uma dessas anotações, certifique-se de que não tenha misturado o tipo de acesso (campos e propriedades anotados) em sua hierarquia de classes de entidade.

Na classe de entidade a seguir, a anotação Entity é sinalizada pela regra.

import javax.persistence.Entity;

@Entity
public class EntityNoId {

}

Para identificar a chave primária, inclua o 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;
}

Para obter informações sobre os problemas de migração do OpenJPA para o EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: mapeamentos.