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.