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 classe publique UnannotatedCollectionEntité { @Id private int id ; private 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 classe publique UnannotatedCollectionEntité { @Id private int id ; @Transient private Collection collectionField; @Transient private Liste listField; }
Pour des informations sur ce problème et d'autres problèmes de migration d'OpenJPA vers EclipseLink, voir le guide OpenJPA to EclipseLink JPA Migration: Mappings.