【发布时间】:2011-05-18 11:43:21
【问题描述】:
我遇到了一对多关系的问题。我有一个抽象类 Artifact.java。这未映射到表。还有其他从这里扩展的具体类,它们被映射到不同的表。现在我有另一个类,映射到一个表,并且这个类可以有任何这些类的集合,即 Artifact.java 类型的集合。我需要使用 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。现在每个工件都可以有多个子项(一对多),它们无论如何都不相关。因此,我们决定创建一个抽象类 ArtifactItem.java,以便所有子项都可以扩展它。因此,Artifact 具有 ArtifactItems 列表。
ArtifactItem.java,并且没有映射到表。这包含 2 个元素,一个 id 和一个 artifactId,用作外键。 Id 已标记为 @GeneratedValue(strategy = GenerationType.AUTO) 和 artifactId 为 @ManyToOne(targetEntity = Artifact.class) @JoinColumn(name = "artifact_id", referencedColumnName = "id")。并且该类已被注释为@MappedSuperclass。
有许多子项,扩展了 ArtifactItem。每个都有自己的表,例如,ArtifactType1.java 有自己的字段并映射到 ArtifactType1 表等等。
现在,由于 Artifact.java 的列表需要映射到 ArtifactItem,因为该列表是 ArtifactItems 的集合。但是当我尝试以上述方式映射它时,我得到了上面给出的异常。
希望现在更清楚:)。
谢谢。
【问题讨论】:
-
您能否重新表述您的问题以使您的班级之间的关系更加清晰?
标签: jpa