2010-11-25 82 views
18

是否有可能強制hibernate使用繼承類型加入的鑑別器列? 根據JPA2.0規範,這應該是可能的,但我不能在休眠中實現它。Discriminator in InheritanceType.JOINED

實施例:

@Inheritance(strategy = InheritanceType.JOINED) 
@ForceDiscriminator 
@DiscriminatorColumn(name="TYPE") 
@Entity 
public class Parent 

@Entity 
@DiscriminatorValue("C") 
public class Child extends Parent 

使用hibernate.hbm2ddl.auto創建時,這甚至不創建該表PARENT列類型。

我知道InheritanceType.JOINED的工作原理沒有定義鑑別器列,但它是無效的,因爲那時hibernate需要在鑑別器列中使用信息時,在父代和所有孩子之間創建連接,而不是隻有父代和一個孩子。

+1

進一步的搜索看起來像它不是支持者通過Hibernate註釋:http://opensource.atlassian.com/projects/hibernate/browse/ANN-140 – milbr 2010-11-25 10:13:47

回答

1

你想使用@Inheritance(strategy = InheritanceType.SINGLE_TABLE)嗎?

+0

不,我不想,我想在數據庫中規範化模式。使用InheritanceType.SINGLE_TABLE添加某個子項時,必須更改我希望避免的父表的結構(添加一些列)。 – milbr 2010-11-25 12:23:40

+1

從我記憶中不支持連接繼承的鑑別器列。讓我爲你升級hibernate doc。 – 2010-11-25 12:29:54

12

我在子類上使用了SINGLE_TABLE與Discriminator和SecondaryTable來做這件事情。 I.E.

@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="TYPE") 
@Entity 
public class Parent 

@Entity 
@DiscriminatorValue("C") 
@SecondaryTable(name = "child", pkJoinColumns = {@PrimaryKeyJoinColumn(name="id", referencedColumnName = "id")}) 
public class Child extends Parent 

當你添加一個新的子類,你添加一個新的表,其中有相關的擴展數據字段。

相關問題