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.