Я пытаюсь реализовать очень простую модель наследования в Hibernate.В основном у меня есть один суперкласс, который можно назвать A
, и несколько подклассов, которые все наследуются от A
.Поскольку поведение, которое я вижу, одинаково для всех из них, их можно назвать B
.
Я пытаюсь прийти к тому, что описано здесь в разделе 6.2.По сути, должна быть таблица для A
, которая содержит его поля, и таблица для B
, которая содержит только поля, отличные от подкласса, плюс столбец соединения с таблицей для A
.Я использую автоматическое создание схемы Hibernate (включено только для модуля персистентности разработки).
Однако, когда я смотрю на схему, я вижу таблицу для A
, содержащую ее поля (правильно) и таблицу для B
, которая содержит все поля в A
(неверно), а также поля, добавленные в B
.Мои занятия помечены следующим образом:
@Entity
@Table(name="A")
@Inheritance(strategy = InheritanceType.JOINED)
public class A implements Serializable {
protected long id;
protected Date createDate;
protected String title;
protected boolean hidden;
public A() {
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public long getId() {
return id;
}
@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
public Date getCreateDate() {
return createDate;
}
@Column(nullable = false)
public boolean isHidden() {
return hidden;
}
@Column(nullable = false)
public String getTitle() {
return title;
}
//also setters...
}
@Entity
@Table(name="B")
@PrimaryKeyJoinColumn(name="aId", referencedColumnName="id")
public class B extends A {
private String extraField;
public B() {
super();
}
@Column
public String getExtraField() {
return extraField;
}
//also setter...
}
Есть идеи, что я сделал не так?В частности, то, что я хочу видеть, когда смотрю на сгенерированную схему БД, выглядит примерно так:
Table A: {id, createDate, title, hidden}
Table B: {aId, extraField}
... и вместо этого я получаю:
Table A: {id, createDate, title, hidden}
Table B: {id, createDate, title, hidden, extraField}
Это простоневозможно использовать автоматическую генерацию схемы Hibernate, или я где-то испортил аннотации?