Будьте в спящем режиме Отображенные отношения Суперкласса и переопределение

У меня есть абстрактный 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;
    }

    ...
}
7
задан Andrew 12 July 2010 в 21:26
поделиться

1 ответ

Сопоставленный суперкласс не является сущностью, он не может быть частью ассоциации. Поэтому создавайте классы как сущности и либо представляйте сопоставленный суперкласс "над" ними, либо используйте стратегию TABLE_PER_CLASS.

См. также

6
ответ дан 7 December 2019 в 09:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: