Les attributs de collection non annotés nécessitent une annotation Transient

Dans OpenJPA, les attributs qui héritent de l'interface java.util.Collection<E> ne sont pas par défaut de type persistant et, par conséquent, ne sont conservés que s'ils sont annotés. EclipseLink a un comportement différent et tente de conserver ces attributs dans la base de données. Pour conserver le comportement d'OpenJPA qui consiste à ignorer les attributs de collection non annotés, ajoutez l'annotation javax.persistence.Transient à ces attributs dans EclipseLink.

Cette règle marque les attributs sans annotation JPA qui héritent de l'interface java.util.Collection<E>, dont les sous-interfaces suivantes :

Dans la classe entité suivante, les attributs collectionField et listField sont marqués par la règle.

import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UnannotatedCollectionEntity { @Id private int id; private Collection collection collectionField; private List listField; }

Un correctif automatique ajoutera les annotations @Transient et la déclaration d' importation.

import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity public class UnannotatedCollectionEntity { @Id private int id; @Transient private Collection collectionField; @Transient private List listField; }

Pour plus d'informations sur ce problème et sur d'autres problèmes de migration d'OpenJPA vers EclipseLink, reportez-vous au manuel OpenJPA to EclipseLink JPA Migration: Mappings.