小编典典

Hibernate映射的超类关系和覆盖

hibernate

我有一个抽象的MappedSuperClass,参与者,并通过三种“参与者”进行了扩展。然后,每个人都使用自己的“项目”,也使用抽象的MappedSuperClass。但是,我希望基类了解Projects,以便编写通用代码与参与者进行交互。如何使用Hibernate批注指定此内容?以及如何在ExtendedParticipant和ExtendedProject类中覆盖它?

每个参与者类型和每个项目类型都有自己的数据库表,这些表具有我无法更改的现有数据和ID(在表中不是唯一的)。

以下代码为我提供了IDE错误“许多属性不应该是’Mapped Superclass’”。

@MappedSuperclass
public abstract class Participant implements Persistable {

    ...

    @ManyToOne
    @JoinColumn(name = "project_id")
    public Project getProject() {
        return project;
    }

    public void setProject(Project project) {
        this.project = project;
    }

    ...
}

和Project类在相同的问题上几乎是相同的:

@MappedSuperclass
public abstract class Project implements Persistable {

    ...

    @OneToMany
    public List<Participant> getParticipants() {
        return participants;
    }

    public void setProject(List<Participant> participants) {
        this.participants = participants;
    }

    ...
}

阅读 228

收藏
2020-06-20

共1个答案

小编典典

映射的超类不是实体,不能成为关联的一部分。因此,将您的类映射为实体,并在其“上方”引入映射的超类或使用TABLE_PER_CLASS策略。

2020-06-20