OpenJPA creează un tabel separat pentru atributele colecţiei care sunt adnotate cu
org.apache.openjpa.persistence.PersistentCollection. Pentru a avea acelaşi comportament
în EclipseLink, înlocuiţi aceste adnotări cu adnotările @ElementCollection şi @Column
aşa cum sunt definite în specificaţia JPA. Dacă înlăturaţi adnotarea @PersistentCollection
şi nu adăugaţi adnotările @ElementCollection şi@Column,
EclipseLink tratează câmpul ca o un BLOB şi
încearcă să creeze o coloană pentru datele din tabelul entităţii.
Această regulă scanează pentru adnotările org.apache.openjpa.persistence.PersistentCollection
astfel încât să puteţi să le migraţi manual.
Pentru a migra adnotările, efectuaţi următorii paşi:
@org.apache.openjpa.persistence.PersistentCollection cu
@javax.persistence.ElementCollection @javax.persistence.Column(name="element")Dacă există deja o adnotare
@Column pe atribut,
nu adăugaţi una sau modifica numele.
De exemplu, regula semnalează adnotarea @PersistentCollection în următoarea clasă entitate:
import javax.persistence.Entity; import javax.persistence.Id; import org.apache.openjpa.persistence.PersistentCollection; @Entity public class IntArrayEntity{ @Id private int id; @PersistentCollection private int[] arrayOfInts; } |
Pentru a migra această entitate, înlocuiţi adnotarea şi modificaţi matricea int
la o listă de obiecte Integer: List<Integer>.
import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class IntArrayEntity{ @Id private int id; @ElementCollection @Column(name="element") private List<Integer> arrayOfInts; } |
Pentru informaţii despre această problemă a migrării OpenJPA la EclipseLink, vedeţi ghidul Migration from OpenJPA to EclipseLink JPA: Extended Functionality.