Az OrderColumn annotációk nem támogatottak Set attribútumokhoz

Az OpenJPA megvalósításban egy java.util.Set típusú attribútumhoz beállított OrderColumn annotációval rendelkező egyedosztály akkor is engedélyezett, ha a Set felület nem garantálja a sorrendet. Az EclipseLink szigorúbb, és csak java.util.List típusú attribútumokhoz engedélyezi az OrderColumn annotációt.

Ez a szabály a következő felületeket megvalósító attribútumok esetén jelöli meg az @OrderColumn annotációkat:

Habár a SortedSet, a Set alfelülete biztosít rendezést a Comparable felületén keresztül, ezt az EclipseLink nem támogatja.

A problémát kétféleképpen oldhatja meg attól függően, hogy mennyire fontos megtartani a gyűjtemény sorrendjét.

A következő egyedosztályban a szabály mindkét OrderColumn annotációt megjelöli.

import java.util.HashSet;
import java.util.Set;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OrderColumn;
import javax.persistence.OneToMany;

@Entity
public class OrderColumnExampleEntity {
    @Id
    private int id;
 
    @ElementCollection
    @OrderColumn
    private Set<String> setOfStrings = new HashSet<String>();
    
    @OneToMany
    @OrderColumn
    private Set<RelatedObject> setOfObjects = new HashSet<RelatedObject>();
}

A következő példa mindkét lehetséges megoldást bemutatja.

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OrderColumn;
import javax.persistence.OneToMany;

@Entity
public class OrderColumnExampleEntity {
    @Id
    private int id;
 
    // Az OrderColumn annotáció eltávolítása
    @ElementCollection
    private Set<String> setOfStrings = new HashSet<String>();
    
    // A gyűjtemény típusának módosítása List típusra
    @OneToMany
    @OrderColumn
    private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>();
}

A problémával és más OpenJPA - EclipseLink átállítási problémákkal kapcsolatos információkért tekintse meg az OpenJPA - EclipseLink JPA átállítás: Leképezések útmutatót.