In OpenJPA, una classe entità con un'annotazione OrderColumn in un attributo di tipo java.util.Set è consentita anche se l'interfaccia Set non assicura l'ordine. EclipseLink è più restrittivo e consente un'annotazione OrderColumn sono negli attributi di tipo java.util.List.
Questa regola contrassegna le annotazioni @OrderColumn trovate negli attributi che implementano le seguenti interfacce:
Sebbene SortedSet, un'interfaccia secondaria di Set, fornisca l'ordine con l'interfaccia Comparable, non è supportata da EclipseLink.
È possibile risolvere questo problema in due modi a seconda dell'importanza di mantenere l'ordine della raccolta.
Set ad una raccolta List.OrderColumn.
Nella seguente classe di entità, entrambe le annotazioni OrderColumn sono contrassegnate da questa regola.
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>(); } |
Il seguente esempio mostra l'implementazione di entrambe le possibili soluzioni.
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>(); } |
Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.