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).
Ответы
Ответ 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 в этой стратегии. Посмотрите это для более подробного объяснения.