W produkcie OpenJPA klasa jednostki z adnotacją OrderColumn w
atrybucie typu java.util.Set jest dozwolona, mimo że interfejs
Set nie gwarantuje kolejności. Produkt EclipseLink wymaga większej
dokładności i zezwala na adnotację OrderColumn tylko w atrybutach
typu java.util.List.
Ta reguła powoduje oznaczenie flagą adnotacji @OrderColumn
znalezionych w atrybutach, które implementują następujące interfejsy:
Chociaż podinterfejs SortedSet interfejsu Set
udostępnia porządkowanie ze swoim interfejsem Comparable, nie jest
ono obsługiwane przez produkt EclipseLink.
Ten problem można rozwiązać na dwa sposoby, w zależności od tego, jak ważne jest zachowanie uporządkowania kolekcji.
Set
na kolekcję List.OrderColumn.
W następującej klasie jednostki obie adnotacje OrderColumn są
oznaczone flagą przez tę regułę.
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>(); } |
W poniższym przykładzie przedstawiono implementację obu możliwych rozwiązań.
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; // Usuń adnotację OrderColumn @ElementCollection private Set<String> setOfStrings = new HashSet<String>(); // Zmień kolekcję w listę @OneToMany @OrderColumn private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>(); } |
Informacje na ten temat oraz na temat innych problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.