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