OrderColumn アノテーションは Set 属性に対してはサポートされていない

OpenJPA では、Set インターフェースは順序を保証していなくても、java.util.Set 型の属性に OrderColumn アノテーションが付いているエンティティー・クラスが許可されます。EclipseLink はこれより厳しく、OrderColumn アノテーションは java.util.List 型の属性にのみ許可されます。

この規則により、以下のインターフェースを実装する属性で見つかった @OrderColumn アノテーションにフラグを立てます。

SortedSet (Set のサブインターフェース) は Comparable インターフェースによる順序付けを提供しますが、これは EclipseLink ではサポートされません。

この問題は、コレクションの順序を保持することの重要性に応じて 2 とおりの方法で解決できます。

以下のエンティティー・クラスでは、この規則により両方の OrderColumn アノテーションにフラグが立てられます。

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>();
}

以下の例は、可能な解決策の両方を実行した様子を示します。

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;
 
    // OrderColumn アノテーションを削除
    @ElementCollection
    private Set<String> setOfStrings = new HashSet<String>();
    
    // collection を List に変更
    @OneToMany
    @OrderColumn
    private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>();
}

この問題や、OpenJPA から EclipseLink へのマイグレーションに関するその他の問題については、 OpenJPA to EclipseLink JPA Migration: Mappings ガイドを参照してください。