OpenJPA에서는 Set 인터페이스가 순서를 보장하지 않아도
java.util.Set 유형의 속성에서 OrderColumn 어노테이션이
있는 엔티티 클래스가 허용됩니다. EclipseLink는 더 엄격하여
java.util.List 유형의 속성에서만 OrderColumn
어노테이션을 허용합니다.
이 규칙은 다음 인터페이스를 구현하는 속성에서 찾은 @OrderColumn 어노테이션에
플래그를 지정합니다.
Set의 하위 인터페이스인 SortedSet는 해당 Comparable 인터페이스에 순서를 제공하지만
EclipseLink에서 지원되지 않습니다.
콜렉션 순서 보유의 중요성에 따라 두 가지 방법으로 이 문제를 해결할 수 있습니다.
Set 콜렉션에서 List
콜렉션으로 변경하십시오.OrderColumn 어노테이션을 제거하십시오.
다음 엔티티 클래스에서 규칙에 의해 두 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로 마이그레이션: 맵핑 안내서를 참조하십시오.