我遇到一对多关系的问题。我有一个抽象类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的集合。但是当我尝试以上述方式映射它时,我得到了上面给出的例外。
希望现在更清楚:)。
感谢。
答案 0 :(得分:1)
在@MappedSuperclass
上使用ArtifactItem
(摆脱下划线)