Sustituya la anotación @PersistentCollection de OpenJPA con @ElementCollection y @Column

OpenJPA crea una tabla aparte para los atributos de colección que están anotados con org.apache.openjpa.persistence.PersistentCollection. Para tener el mismo comportamiento en EclipseLink, sustituya estas anotaciones por las anotaciones @ElementCollection y @Column tal como se define en la especificación de JPA. Si elimina la anotación @PersistentCollection y no añade las anotaciones @ElementCollection y @Column, EclipseLink trata el campo como BLOB e intenta crear una columna para los datos en la tabla de la entidad.

Esta regla explora las anotaciones org.apache.openjpa.persistence.PersistentCollection para que pueda migrarlas manualmente. Para migrar las anotaciones, siga los pasos siguientes:

  1. Sustituya la anotación @org.apache.openjpa.persistence.PersistentCollection por
    @javax.persistence.ElementCollection
    @javax.persistence.Column(name="element")
    
    Si ya existe una anotación @Column en el atributo, no añada otra ni cambie el nombre.
  2. Cambie las matrices por colecciones de objetos. Utilice tipos de envoltorio primitivo en lugar de primitivos.

Por ejemplo, esta regla señala la anotación @PersistentCollection en la clase de entidad siguiente:


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;

}

Para migrar esta entidad, sustituya la anotación y cambie la matriz int por una lista de objetos 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;
}

Para obtener más información sobre este problema de migración de OpenJPA a EclipseLink, consulte la publicación Migración de OpenJPA a EclipseLink JPA: Funcionalidad ampliada.