Andrew
Andrew

Reputation: 511

Hibernate Mapped Superclass relationships and overriding

I have an abstract MappedSuperClass, Participant, which is extended by three kinds of 'Participant'. Each one then uses its own kind of 'Project', also an abstract MappedSuperClass. However, I want the base class to know about Projects so I can write generic code to interact with Participants. How do I specify this using Hibernate annotations? and how will I override it in the ExtendedParticipant and ExtendedProject classes?

Each Participant type, and each Project type, have their own database tables with existing data and ids (not unique across tables) that I cannot change.

The following code gives me the IDE error "Many to one attribute should not be '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;
    }

    ...
}

and the Project class is much the same with the same problem:

@MappedSuperclass
public abstract class Project implements Persistable {

    ...

    @OneToMany
    public List<Participant> getParticipants() {
        return participants;
    }

    public void setProject(List<Participant> participants) {
        this.participants = participants;
    }

    ...
}

Upvotes: 11

Views: 20149

Answers (3)

JeSa
JeSa

Reputation: 607

Docs said it's possible, but superclass isn't abstract in example https://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html

Upvotes: 0

roshi
roshi

Reputation: 127

Seems possible to have relations defined through the mappedsuperclass according to the following

Upvotes: 0

Pascal Thivent
Pascal Thivent

Reputation: 570295

A mapped superclass is not an Entity, it can't be part of an association. So map your classes as entities and either introduce a mapped superclass "above" them or use a TABLE_PER_CLASS strategy.

See also

Upvotes: 11

Related Questions