2012-01-24 4 views
1

콜렉션에서 다른 구현을 사용하려면 인터페이스를 엔티티로 매핑해야합니다. org.eclipse.persistence : - :EclipseLink의 @Entity와 같은 JPA 매핑 인터페이스

내부 예외 : 예외 [EclipseLink가-7161 (2.2.0.v20110202-r8913 이클립스 지속성 서비스)

@Entity 
@Table(name = "OPTION") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING) 
public interface FilterOption { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long getId(); 
    public void setId(Long id); 
    public Object getValue(); 
... 
} 

나는 오류를 잡 해요 .exceptions.ValidationException 예외 설명 : 엔터티 클래스 [클래스 FilterOption]에 기본 키가 지정되지 않았습니다. 키가 지정되었습니다. @Id, @EmbeddedId 또는 @IdClass를 정의해야합니다.

@Id가 표시되어 있습니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

관련 : http://stackoverflow.com/q/4745798/342852는 –

답변

2

eclipselink가있는 주석, apparently을 사용하여 인터페이스에 엔티티를 매핑 할 수 없습니다.

실제로는 jpa or hibernate을 사용하여 인터페이스에 엔티티를 매핑 할 수 없습니다.

+0

감사 (클래스는 인터페이스에서 주석을 상속하지 않습니다). 그러나 List 에 대해 ManyToOne 관계를 만들려면 어떻게해야합니까? FilterOption은 많은 구현을 포함하고 있습니다. 그리고이 유형의 컬렉션을 하나의 테이블에 저장하려고합니다. 불가능한가요? –

+0

나는 당신이 무슨 뜻인지 정말로 모르겠다. 어떤 데이터를 지속시키고 싶으면 그 클래스에 주석을 달아주십시오. – NimChimpsky

3

인터페이스를 엔티티로 매핑 할 수 없습니다. 너 정확히 뭘 하려구?

아마도 추상 클래스 AbstractFilterOption을 만들어 Entity 또는 MappedSuperclass로 만듭니다.

EclipseLink에는 인터페이스 지원이 있지만 현재 JPA 주석을 사용하지는 않습니다. 인터페이스에 대한 인터페이스 설명자를 정의 할 수는 있지만 테이블이 없으므로 구현을 쿼리합니다. 또한 @VariableOneToOne 주석을 사용하여 인터페이스를 기반으로 다양한 관계를 매핑 할 수 있습니다.

참조, http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Interfaces

+0

James, FilterOtions (Set ) 집합을 포함하는 Filter 클래스를 유지하려고합니다. 인터페이스 FilterOption에는 많은 구현이 있습니다. 나는 추상을 사용할 수없고 여전히이 문제를 해결할 수 없다. hibernate xml 매핑으로 만들 수 있다고 들었습니다. –