Gli attributi con valori generati automaticamente richiedono configurazione

OpenJPA e EclipseLink creano tabelle differenti per generare valori per gli attributi che l'annotazione @GeneratedValue o @GeneratedValue(strategy=GenerationType.AUTO). Se l'applicazione contiene entità con attributi generati da OpenJPA, la conservazione delle nuove entità con EclipseLink provoca un errore perché EclipseLink tenta di generare questi valori dalla tabella EclipseLink.

Questo problema viene risolto attraverso la configurazione di entità che utilizzino della tabella di sequenza OpenJPA per generare i valori dell'attributo. In questo modo, EclipseLink utilizza l'ultimo valore elencato nella tabella OpenJPA per generare il valore dell'attributo.

Questa regola ricerca attributi annotati con @GeneratedValue o @GeneratedValue(strategy=GenerationType.AUTO). Verrà fornito un automatismo che sostituirà la segnalazione @GeneratedValue con le seguenti annotazioni:

  @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0")
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")

Ad esempio, la regola contrassegna l'annotazione @GeneratedValue nella classe di entità di accesso del campo seguente.

importa javax.persistence.Entity;
import javax.persistence.GeneratedValue;
Importazione javax.persistence.Id;

@Entity
Classe pubblica GeneratedValueEntità {

    @Id @Valore generato int privato id;}

La correzione automatica modifica l'annotazione @GeneratedValue e aggiunge l'annotazione @TableGenerator l'annotazione.

importa javax.persistence.Entity;
import javax.persistence.GeneratedValue;
Importazione javax.persistence.Id;

@Entity
Classe pubblica GeneratedValueEntità {

    @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")
    int privato id;}

Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.