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.
Set gyűjteményről List
gyűjteményre.OrderColumn annotáció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.