Anotace OrderColumn nejsou podporovány v atributech Set

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.

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í.