În OpenJPA, o clasă entitate cu o adnotare OrderColumn pe un atribut
de tipul java.util.Set este permis chiar deşi interfaţa Set
nu garantează ordinea. EclipseLink este mai strict şi permite o adnotare
OrderColumn doar pe atribute de tipul
java.util.List.
Această regulă semnalează adnotările @OrderColumn găsite pentru atributele care implementează
interfeţele următoare:
Deşi SortedSet, o subinterfaţă a Set, furnizează ordonarea cu interfaţa sa Comparable
nu este suportată de EclipseLink.
Puteţi rezolva această problemă în două moduri în funcţie de importanţa păstrării ordinii colecţiei.
Set
la o colecţie List.OrderColumn.
În următoarea clasă entitate, ambele adnotări OrderColumn sunt semnalate de
această regulă.
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>(); } |
Următorul exemplu demonstrează implementarea ambelor soluţii posibile.
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; // Remove the OrderColumn annotation @ElementCollection private Set<String> setOfStrings = new HashSet<String>(); // Change the collection to a List @OneToMany @OrderColumn private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>(); } |
Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.