У меня есть абстрактный MappedSuperClass, Участник, который расширяется тремя видами 'Участника'. Каждый затем использует его собственный вид 'Проекта', также абстрактный MappedSuperClass. Однако я хочу, чтобы базовый класс знал о Проектах, таким образом, я могу написать общий код для взаимодействия с Участниками. Как я указываю, что это использование В спящем режиме аннотации? и как я переопределю его в классах ExtendedParticipant и ExtendedProject?
Каждый Участвующий тип и каждый тип Проекта, имеют их собственные таблицы базы данных с существующими данными и идентификаторами (не уникальный через таблицы), что я не могу измениться.
Следующий код дает мне ошибку 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;
}
...
}
Сопоставленный суперкласс не является сущностью, он не может быть частью ассоциации. Поэтому создавайте классы как сущности и либо представляйте сопоставленный суперкласс "над" ними, либо используйте стратегию TABLE_PER_CLASS
.