我有一个抽象的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; } ... }
映射的超类不是实体,不能成为关联的一部分。因此,将您的类映射为实体,并在其“上方”引入映射的超类或使用TABLE_PER_CLASS策略。
TABLE_PER_CLASS