Înlocuiţi adnotarea OpenJPA @PersistentCollection cu @ElementCollection şi @Column

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:

  1. Înlocuiţi adnotarea @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.
  2. Modificaţi matricele de colecţii de obiecte. Folosiţi tipuri wrapper primitive în loc de primitive.

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.