我有一个抽象的MappedSuperClass,参与者,它由三种“参与者”扩展。然后每个人都使用自己的'Project',也是一个抽象的MappedSuperClass。但是,我希望基类了解Projects,这样我就可以编写通用代码来与Participants进行交互。如何使用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;
}
...
}
答案 0 :(得分:5)
映射的超类不是实体,它不能是关联的一部分。因此,将您的类映射为实体,并在其上方引入映射的超类或使用TABLE_PER_CLASS
策略。
答案 1 :(得分:0)
似乎可以通过mappedsuperclass定义关系 根据以下
答案 2 :(得分:0)
Docs表示有可能,但示例中的超类并不是抽象的 https://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html