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). Automatizovaná bude poskytnuta tam, kde nahradí označený @GeneratedValue anotaci 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
veřejná třída GeneratedValueentita {

    @Id @GeneratedValue private int id;}

Automatická oprava změní @GeneratedValue anotaci a přidá @TableGenerator anotaci.

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

@Entity
veřejná třída GeneratedValueentita {

    @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í.