OrderColumn 어노테이션은 설정 속성에 대해 지원되지 않음

OpenJPA에서는 Set 인터페이스가 순서를 보장하지 않아도 java.util.Set 유형의 속성에서 OrderColumn 어노테이션이 있는 엔티티 클래스가 허용됩니다. EclipseLink는 더 엄격하여 java.util.List 유형의 속성에서만 OrderColumn 어노테이션을 허용합니다.

이 규칙은 다음 인터페이스를 구현하는 속성에서 찾은 @OrderColumn 어노테이션에 플래그를 지정합니다.

Set의 하위 인터페이스인 SortedSet는 해당 Comparable 인터페이스에 순서를 제공하지만 EclipseLink에서 지원되지 않습니다.

콜렉션 순서 보유의 중요성에 따라 두 가지 방법으로 이 문제를 해결할 수 있습니다.

다음 엔티티 클래스에서 규칙에 의해 두 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;
 
    // Remove the OrderColumn annotation
    @ElementCollection
    private Set<String> setOfStrings = new HashSet<String>();
    
    // Change the collection to a List
    @OneToMany
    @OrderColumn
    private List<RelatedObject> setOfObjects = new ArrayList<RelatedObject>();
}

이 문제 및 기타 OpenJPA에서 EclipseLink로의 마이그레이션 문제에 대한 정보는 OpenJPA에서 EclipseLink JPA로 마이그레이션: 맵핑 안내서를 참조하십시오.