我有一个抽象的 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/