Atributy s automaticky generovanými hodnotami vyžadují konfiguraci

OpenJPA a EclipseLink vytváří různé tabulky k vygenerování hodnot pro atributy, které mají buď anotaci @GeneratedValue, nebo @GeneratedValue(strategy=GenerationType.AUTO). Pokud vaše aplikace obsahuje entity s atributy, které byly vygenerovány rozhraním OpenJPA, budou nové entity používající EclipseLink příčinou chyby, protože EclipseLink se pokusí tyto hodnoty vygenerovat z tabulky EclipseLink.

Tento problém je vyřešen konfigurací entity pro použití sekvenční tabulky OpenJPA ke generování hodnot atributu. Tímto způsobem bude EclipseLink používat poslední hodnotu uvedenou v tabulce OpenJPA a generovat hodnotu atributu.

Toto pravidlo prochází atributy, které jsou anotovány buď pomocí @GeneratedValue, nebo @GeneratedValue(strategy=GenerationType.AUTO). Rychlá oprava nahradí označenou anotaci @GeneratedValue s následujícími anotacemi:

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

Pravidlo např. označí anotaci @GeneratedValue v následující třídě entity přístupu k poli.

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

@Entity
public class GeneratedValueEntity {

    @Id
    @GeneratedValue
    private int id;

}

Rychlá oprava upraví anotaci @GeneratedValue a přidá anotaci @TableGenerator .

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

@Entity
public class GeneratedValueEntity {

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

Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.