java - Hibernate 映射的父类(super class)关系和覆盖

标签 java hibernate annotations

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

每个参与者类型和每个项目类型都有自己的数据库表,其中包含我无法更改的现有数据和 ID(跨表不唯一)。

下面的代码给出了 IDE 错误“多对一的属性不应该是‘映射的父类(super class)’”。

@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;
    }

    ...
}

最佳答案

映射的父类(super class)不是实体,它不能是关联的一部分。因此,将您的类映射为实体,然后在它们“之上”引入一个映射的父类(super class),或者使用 TABLE_PER_CLASS 策略。

另见

关于java - Hibernate 映射的父类(super class)关系和覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227854/

相关文章:

java - 如何将方法标记为强制性的?

windows - __deref_out_opt 和 __deref_opt_out 有什么区别?

java - 如何让斯坦福 CoreNLP 使用您创建的训练模型?

java - 在数组上同步。它是在所有元素上同步还是在数组对象上同步?

java - CommandLineRunner 不会向用户添加角色

xml - 正则表达式过滤器 log4j2

java - 为注释字段设置默认空值时出错

java - 如何指定使用哪个 Ivy 解析器

java - 使用回滚时事务测试方法不抛出异常

SQL 语句中的 Spring Boot Hibernate 语法错误