Atributele colecţie neadnotate necesită o adnotare Transient

În OpenJPA, atributele care moştenesc de la interfaţa java.util.Collection<E> nu sunt un tip persistent implicit, aşa că aceste atribute nu sunt persistente decât dacă sunt adnotate. EclipseLink are un comportament implicit diferit şi încearcă să persiste aceste atribute la baza de date. Pentru a păstra comportamentul OpenJPA de ignorare a atributelor de colecţie neadnotate, adăugaţi adnotarea javax.persistence.Transient la aceste atribute în EclipseLink.

Această regulă semnalează atributele fără adnotări JPA care moştenesc de la interfaţa java.util.Collection<E>, inclusiv următoarele subinterfeţe:

În următoarea clasă entitate, atributele collectionField şi listField sunt semnalate de regulă.

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;

}

Corecţia rapidă adaugă adnotările @Transient şi declaraţia 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;

}

Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.