Sostituzione dell'annotazione OpenJPA @PersistentCollection con @ElementCollection e @Column

OpenJPA crea una tabella separata per gli attributi di raccolta annotati con org.apache.openjpa.persistence.PersistentCollection. Avere lo stesso comportamento in EclipseLink, sostituire queste annotazioni con quelle @ElementCollection e @Colonna come definito nella specifica JPA. Se si rimuove l'annotazione @PersistentCollection e non si aggiungono le annotazioni @ElementCollection e @Colonna, EclipseLink gestisce il campo come BLOB e tenta di creare una colonna per i dati nella tabella dell'entità.

Questa regola ricerca le annotazioni org.apache.openjpa.persistence.PersistentCollection in modo da poterle migrare manualmente. Per migrare le annotazioni, effettuare le seguenti operazioni:

  1. Sostituire l'annotazione @org.apache.openjpa.persistence.PersistentCollection con
    @javax.persistence.ElementCollection
    @javax.persistence.Column(name="element")
    
    Se sull'attributo esiste già un'annotazione @Column, non aggiungerne un'altra o modificarne il nome.
  2. Modificare gli array in raccolte di oggetti. Utilizzare i tipi wrapper primitivi invece dei primitivi.

Ad esempio, questa regola contrassegna l'annotazione @PersistentCollection nella classe di entità seguente:


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;

}

Per migrare questa entità, sostituire l'annotazione e modificare l'array int in un elenco di oggetti 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;
}

Per informazioni su questo problema della migrazione da OpenJPA a EclipseLink, consultare la guida Migration from OpenJPA to EclipseLink JPA: Extended Functionality.