Atributele cu valori generate automat necesită configurare

OpenJPA şi EclipseLink creeză tabele diferite pentru a genera valori pentru atributele care au fie adnotarea @GeneratedValue sau @GeneratedValue(strategy=GenerationType.AUTO). Dacă aplicaţia dumneavoastră conţine entităţi cu atribute care au fost generate de OpenJPA, entităţi noi persistente folosind EclipseLink cauzează o eroare deoarece EclipseLink încearcă să genereze aceste valori din tabelul EclipseLink.

Această problemă este rezolvată prin configurarea entităţii să folosească tabelul secvenţă OpenJPA pentru a genera valorile atributului. Făcând astfel, EclipseLink utilizează ultima valoare din tabelul OpenJPA pentru a genera valoarea atributului.

Această regulă scanează pentru atributele care sunt adnotate cu fie @GeneratedValue sau @GeneratedValue(strategy=GenerationType.AUTO). Un automat va fi furnizat în cazul în care acesta va înlocui marcajul @GeneratedValue cu următoarele adnotări:

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

De exemplu, regula semnalează adnotarea @GeneratedValue în clasa entitate acces câmp următoare.

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

@Entity
clasă publică GeneratedValueEntitate

    @Id int privat ;}

Soluția automată va modifica @GeneratedValue și adaugă notația @TableGenerator adnotare.

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

@Entity
clasă publică GeneratedValueEntitate

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

Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.