我想在Hibernate中實現一個非常簡單的繼承模型。基本上我有一個叫做A
的超類,有幾個子類都從A
繼承。由於我看到的行爲對於所有這些行爲都是相同的,因此他們可以被簡稱爲B
。JPA /休眠 - InheritanceType.JOINED行爲像InheritanceType.TABLE_PER_CLASS
我想要達到的是在6.2節中描述的here。基本上,應該有一個包含其字段的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自動模式生成,還是我搞砸了註釋的地方?
謝謝,我不認爲我曾經使用'InheritanceType.TABLE_PER_CLASS',但在任何情況下刪除表並讓Hibernate重新生成架構,因爲您建議修正事情。 – aroth 2011-05-17 23:10:29