Remplacer l'annotation OpenJPA @PersistentCollection par @ElementCollection et @Column

OpenJPA crée une table séparée pour les attributs de collection annotés avec org.apache.openjpa.persistence.PersistentCollection. Pour appliquer le même comportement dans EclipseLink, remplacez ces annotations par les annotations @ElementCollection et @Column comme défini dans la spécification JPA. Si vous supprimez l'annotation @PersistentCollection sans ajouter les annotations @ElementCollection et @Column, EclipseLink traite cette zone comme une zone BLOB et tente de créer une colonne pour les données dans la table de l'entité.

Cette règle recherche des annotations org.apache.openjpa.persistence.PersistentCollection pour que vous puissiez les migrer manuellement. Pour migrer les annotations, procédez comme suit:

  1. Remplacer l'annotation @org.apache.openjpa.persistence.PersistentCollection par
    @javax.persistence.ElementCollection
    @javax.persistence.Column(name="element")
    
    Si une annotation @Column existe déjà sur l'attribut, n'en ajoutez pas d'autre et ne changez pas son nom.
  2. Changez les tableaux en collections d'objets. Utilisez des types de classe d'encapsulation primitifs au lieu de primitives.

Par exemple, cette règle marque l'annotation @PersistentCollection dans la classe entité suivante :


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;

}

Pour migrer cette entité, remplacez l'annotation et changez le tableau int en liste d'objets 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;
}

Pour des informations sur ce problème de migration d'OpenJPA vers EclipseLink, voir le guide Migration from OpenJPA to EclipseLink JPA: Extended Functionality.