Wszystkie obiekty muszą mieć klucz podstawowy

W interfejsie OpenJPA klasy jednostki można definiować bez klucza podstawowego, co powoduje wygenerowanie domyślnego klucza podstawowego o nazwie ID. Interfejs EclipseLink wymaga, aby wszystkie klasy jednostki miały atrybut identyfikowany jako klucz podstawowy za pomocą adnotacji @Id, @EmbeddedId lub @IdClass.

Ta reguła skanuje klasy jednostki i sprawdza, czy zawierają atrybut z adnotacją @Id, @EmbeddedId lub @IdClass. W przypadku klas bez tych atrybutów z adnotacjami należy dodać atrybut ID, który używa kolumny wygenerowanej przez interfejs OpenJPA dla tej jednostki. Ta reguła jest ograniczona do sprawdzania obiektów, które są zawarte w jednej klasie. Jeśli klasa jednostki rozszerza inne klasy jednostki lub odwzorowane nadklasy, reguła ta nie powoduje oznaczenia brakujących kluczy podstawowych. W takich przypadkach wystąpienie wyjątku środowiska wykonawczego, takiego jak w poniższym przykładzie, oznacza brak klucza podstawowego:

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.

W następującej klasie jednostki adnotacja Entity zostaje oznaczona przez regułę.

import javax.persistence.Entity;

@Entity
public class EntityNoId {

}

Aby zidentyfikować klucz podstawowy, należy dodać atrybut z adnotacją.

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

Informacje na ten temat problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.