java Hibernate映射的超类关系和重写
我有一个抽象的MappedSuperClass,Participant,它由三种“Participant”扩展。然后每一个都使用自己的“项目”,也是一个抽象的MappedSuperClass。但是,我希望基类了解项目,以便编写与参与者交互的通用代码。如何使用Hibernate注释来指定这一点?我将如何在ExtendedParticipant和ExtendedProject类中重写它
每个参与者类型和每个项目类型都有自己的数据库表,其中包含我无法更改的现有数据和ID(表之间不是唯一的)
下面的代码给出了IDE错误“多对一属性不应该是‘映射超类’”
@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;
}
...
}
项目类与相同问题的项目类大致相同:
@MappedSuperclass
public abstract class Project implements Persistable {
...
@OneToMany
public List<Participant> getParticipants() {
return participants;
}
public void setProject(List<Participant> participants) {
this.participants = participants;
}
...
}
# 1 楼答案
似乎可以通过mappedsuperclass定义关系 根据以下
# 2 楼答案
映射的超类不是实体,它不能是关联的一部分。因此,将类映射为实体,或者在它们上面引入映射的超类,或者使用
TABLE_PER_CLASS
策略另见
# 3 楼答案
Docs说这是可能的,但在示例中超类并不是抽象的 https://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html