2010-12-01 14 views
0

私は1対多の関係に問題があります。私は抽象クラスArtifact.javaを持っています。これはテーブルにマップされません。これから広がる他の具体的なクラスがあり、それらは異なるテーブルにマップされます。今、別のクラスがテーブルにマップされています。このクラスは、これらのクラスのコレクション、つまりArtifact.java型のコレクションを持つことができます。私はJPAを使ってこれをマップし、以下のようにしなければなりません。Issue @OneToManyとJPAの抽象化

@OneToMany(mappedBy="artifactId",targetEntity=Artifact_Item.class, 
     fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
private List<Artifact_Item> artifactItemList; 

この結果、次の例外が発生します。

org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: dao.model.Artifact.artifactItemList[dao.model.Artifact_Item] 

誰でもこの問題を解決できますか?

ありがとうございました。

申し訳ありませんが、私は質問を言い換えています。 私はクラスArtifact.javaを持っていますが、それはテーブルArtifactにマップされています。現在、各成果物は複数のサブアイテム(1対多)を持つことができ、いずれにしても関連しません。だから、私たちは抽象クラスArtifactItem.javaを持っているので、すべてのサブアイテムでこれを拡張することができました。したがって、ArtifactにはArtifactItemのリストがあります。

ArtifactItem.javaで、テーブルにマップされていません。これには、外部キーとして使用されるidとartifactIdという2つの要素が含まれています。 IDは@GeneratedValue(strategy = GenerationType.AUTO)、artifactIdは@ManyToOne(targetEntity = Artifact.class) @JoinColumn(name = "artifact_id"、referencedColumnName = "id")としてマークされています。クラスは@MappedSuperclassとして注釈されています。

ArtifactItemを拡張する多数のサブアイテムがあります。それぞれに独自のテーブルがあります。たとえば、ArtifactType1.javaには独自のフィールドがあり、ArtifactType1テーブルなどにマッピングされます。

ここで、Artifact.javaのリストはArtifactItemのコレクションであるため、ArtifactItemにマップする必要があります。しかし、上記の方法でマップしようとすると、上記の例外が発生します。

希望は、今すぐ明確に:)。

ありがとうございました。 ArtifactItem

+0

あなたは、クラス間の関係をより明確にするために、あなたの質問に言い換えることができますか? – axtavt

答えて

1

使用@MappedSuperclass(アンダースコアを取り除く)

+0

ねえメイト、@MappedSuperclassがそのクラスに追加されました:(。 – Raj

+0

私もクラスの名前を変更しました。 – Raj