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:
@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.
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.