En OpenJPA, está permitida una clase de entidad con una anotación OrderColumn en un atributo del tipo java.util.Set, aunque la interfaz Set no garantiza el orden. EclipseLink es más estricto y permite una anotación OrderColumn solo en atributos del tipo java.util.List.
Esta regla señala las anotaciones @OrderColumn encontradas en atributos que implementan las interfaces siguientes:
Aunque SortedSet, una interfaz secundaria de Set, proporciona ordenación con su interfaz Comparable, EclipseLink no la admite.
Puede resolver este problema de dos formas, en función de la importancia que tiene conservar el orden de la colección.
Set a una colección List.OrderColumn.
En la clase de entidad siguiente, ambas anotaciones OrderColumn se señalan con esta regla.
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>(); } |
El ejemplo siguiente muestra la implementación de ambas posibles soluciones:
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; // Eliminar la anotación OrderColumn @ElementCollection private Set<String> setOfStrings = new HashSet<String>(); // Cambiar la colección a List @OneToMany @OrderColumn private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>(); } |
Si desea más información sobre este problema y otros problemas de migración de OpenJPA a EclipseLink, consulte la guía Migración de OpenJPA a EclipseLink JPA: Correlaciones.