Î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.