W interfejsie OpenJPA atrybuty dziedziczące z interfejsu java.util.Collection<E> nie są domyślnym typem trwałym, dlatego atrybuty te nie są utrwalana, jeśli nie są opatrzone adnotacjami.
Domyślne działanie interfejsu EclipseLink jest inne – następuje próba utrwalenia tych atrybutów w bazie danych.
Aby zachować działanie interfejsu OpenJPA, czyli ignorować atrybuty kolekcji bez adnotacji, należy dodać do tych atrybutów w interfejsie EclipseLink adnotację javax.persistence.Transient.
Ta reguła powoduje oznaczenie atrybutów bez adnotacji JPA, które dziedziczą z interfejsu java.util.Collection<E>, w tym następujące podinterfejsy:
W poniższej klasie jednostki atrybuty collectionField i listField są oznaczane przez regułę.
import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; @Entity klasa publiczna UnannotatedCollectionJednostka { @Id private int id; private Collection collectionField; private List listField; }
Automatyczna poprawka doda adnotacje @Transient i instrukcję importu.
import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity klasa publiczna UnannotatedCollectionJednostka { @Id private int id; @Transient private Collection collectionField; @Transient private List listField; }
Informacje na ten temat oraz na temat innych problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.