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.