2012-01-24 10 views
1

コレクションを異なる実装を使用するために、インターフェイスをエンティティとしてマップする必要があります。 org.eclipse.persistence: - :EclipseLinkの@EntityとしてのJPAマッピングインターフェイス

内部例外:例外[EclipseLinkの-7161](2.2.0.v20110202-r8913 Eclipseの永続 サービス)

@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

おかげで(クラスは、そのインタフェースからの注釈を継承しません)。しかし、リストでManyToOne関係を作成するにはどうすればいいですか? FilterOptionは、多くの実装を持っているinterfaseです。そして、私はこのタイプのコレクションを1つのテーブルに格納したいと思っています。それは不可能ですか? –

+0

私はあなたが何を意味するのか本当に理解していません。どのデータを永続化したいのですか?そのクラスに注釈を付けます。 – NimChimpsky

3

インターフェイスをエンティティとしてマップすることはできません。あなたは正確に何をしようとしていますか?

おそらく抽象クラスAbstractFilterOptionを作成し、それをEntityまたはMappedSuperclassにします。

EclipseLinkはインタフェースをサポートしていますが、JPAアノテーションでは現在のところサポートされていません。インターフェースのインターフェース記述子を定義することはできますが、それはテーブルを持たず、実装を照会するだけです。 @VariableOneToOneアノテーションを使用して、インタフェースに基づいて可変リレーションシップをマップすることもできます。

を参照してください、 http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Interfaces

+0

James、FilterOtions(Set )のセットを含むFilterクラスを永続化しようとしています。 Interface FilterOptionにはさまざまな実装があります。私は要約を使用することはできませんし、まだこの問題を解決することはできません。 hibernate xml mappingで作ることができると聞きました –

関連する問題