Atrybuty kolekcji bez adnotacji wymagają adnotacji Transient

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
public class UnannotatedCollectionEntity {
    @Id
    private int id;
   
    private Collection collectionField;
    private List listField;

}

Szybka poprawka dodaje adnotację @Transient i instrukcję 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;

}

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.