Las anotaciones OrderColumn no están soportadas en los atributos Set

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.

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.