Gli attributi di raccolta non annotati richiedono un'annotazione Transient

In OpenJPA, gli attributi che ereditano dall'interfaccia java.util.Collection<E> non rappresentano un tipo persistente predefinito, quindi questi attributi non sono persistenti a meno che non siano annotati. EclipseLink ha un comportamento predefinito differente e tenta di conservare questi attributi nel database. Per adottare il comportamento di OpenJPA, che ignora gli attributo di raccolta non annotati, aggiungere l'annotazione javax.persistence.Transient a tali attributi in EclipseLink.

Questa regola contrassegna gli attributi senza annotazioni JPA che ereditano dall'interfaccia java.util.Collection<E>, comprese le seguenti sotto interfacce:

Nella classe di entità seguente, gli attributi collectionField e listField vengono contrassegnati dalla regola.

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;

}

La correzione rapida aggiunge l'annotazione @Transient e l'istruzione 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;

}

Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.