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 collectionField;
    private List listField;

}

Le correctif rapide ajoute les annotations @Transient et l'instruction import.

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