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