Подтвердить что ты не робот

Hibernate Annotation с использованием базового объекта

В моем проекте у меня есть POJO под названием BaseEntity, как показано ниже.

class BaseEntity{
    private int id;
    public void setId(int id){
        this.id=id;
    }
    public int getId(){
        return id;
    }
}

И набор других классов сущности POJO, таких как Movie, Actor,...

class Movie extends BaseEntity{
    private String name;
    private int year;
    private int durationMins;
    //getters and setters
}

Я использую BaseEntity только для того, чтобы использовать его в качестве владельца места на некоторых интерфейсах. Мне никогда не нужно хранить объект BaseEntity. Я должен хранить только объекты объекта, расширенные из BaseEntity. Как я должен аннотировать эти классы, чтобы получить одну таблицу на сущность, расширенную из BaseEntity. Для фильма это должно быть как (id, name, year, durationMins).

4b9b3361

Ответ 1

Я нашел ответ в совершенно несвязанной статье. Мне просто нужно аннотировать BaseEntity как @MappedSuperclass. Следующий код сделал то, что мне нужно.

@MappedSuperclass
class BaseEntity {
    @Id
    private int id;
    //getters and setters.
}
@Entity
class Movie extends BaseEntity {
    @Column
    private String name;
    @Column
    private int year;
    @Column
    private int durationMins;
    //getters and setters
}

Ответ 2

Вы можете использовать @MappedSuperClass на BaseEntity и Movie расширять его.

@MappedSuperClass
class BaseEntity {
    @Id
    private int id;
    ...
}

class Movie extends BaseEntity {
    ...
}

Ответ 3

Вам нужна стратегия Table Per Concrete. И вам не нужна аннотация для вашего BaseEntity в этой стратегии. Посмотрите это для более подробного объяснения.