Substituir a anotação @PersistentCollection do OpenJPA por @ElementCollection e @Column

O OpenJPA cria uma tabela separada para atributos de coleção que são anotados com org.apache.openjpa.persistence.PersistentCollection. Para ter o mesmo comportamento no EclipseLink, substitua essas anotações pelas anotações @ElementCollection e @Column conforme definido na especificação JPA. Se você remover a anotação @PersistentCollection e não incluir as anotações @ElementCollection e @Column, o EclipseLink tratará o campo como um BLOB e tentará criar uma coluna para os dados na tabela da entidade.

Essa regra varre as anotações org.apache.openjpa.persistence.PersistentCollection para que seja possível migrá-las manualmente. Para migrar as anotações, execute as etapas a seguir:

  1. Substitua a anotação @org.apache.openjpa.persistence.PersistentCollection por
    @javax.persistence.ElementCollection
    @javax.persistence.Column(name="element")
    
    Se já houver uma anotação @Column no atributo, não inclua outra nem mude o nome.
  2. Mude as matrizes para coleções de objetos. Use tipos de wrapper primitivo em vez de primitivas.

Por exemplo, essa regra sinaliza a anotação @PersistentCollection na classe de entidade a seguir:


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 essa entidade, substitua a anotação e mude a matriz int para uma 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 obter informações sobre este problema de migração do OpenJPA para EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: funcionalidade estendida.