V rozhraní OpenJPA je povolena třída entity s anotací OrderColumn atributu typu java.util.Set i v případě, že rozhraní Set nezaručuje pořadí. EclipseLink je přísnější a povoluje anotaci OrderColumn pouze na atributech typu java.util.List.
Toto pravidlo značí anotace @OrderColumn nalezené na atributech, které implementují následující rozhraní:
Ačkoli SortedSet, podřízené rozhraní Set, poskytuje řazení s rozhraním Comparable, není podporováno EclipseLink.
Tento problém můžete vyřešit dvěma způsoby, a to v závislosti na důležitosti uchování pořadí kolekce.
Set na kolekci List.OrderColumn.
V následující třídě entity jsou anotace OrderColumn označeny tímto pravidlem.
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>(); } |
V následujícím příkladu je uvedena implementace obou možných řešení.
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; // Odebrat anotaci OrderColumn @ElementCollection private Set<String> setOfStrings = new HashSet<String>(); // Změnit kolekci na List @OneToMany @OrderColumn private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>(); } |
Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.