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