2012-03-27 19 views
0

我有這樣的結構:MultiDiscriminator柱

抽象類A
抽象類B擴展甲
抽象類別C延伸乙

這是我的實際映射:

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@Table(name = "TAB_A") 
@DiscriminatorColumn(name="DISCRIMINATOR_A", discriminatorType=DiscriminatorType.STRING) 
public abstract class A { 
} 


@Entity 
@DiscriminatorValue("VALUE") 
@SecondaryTable(name = "TAB_B", pkJoinColumns = {@PrimaryKeyJoinColumn(name="ID_A")}) 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name="DISCRIMINATOR_B",discriminatorType=DiscriminatorType.STRING) 
public abstract class B extends A 
{ 
} 


@Entity 
@DiscriminatorValue("VALUEB") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
public abstract class C extends B 
{ 
} 

我在A和B之間有一個dicriminator列,它是discriminatorA。
我在B和C之間有一個判別器列,它是discriminatorB。

A和B之間的繼承工作。 B和C之間的繼承不起作用。我讀了這一點:

11.1.10 DiscriminatorColumn註釋

對於SINGLE_TABLE映射策略,通常也可以通過所加入的策略,持久性提供程序將使用一個類型鑑別列。 DiscriminatorColumn標註用於定義SINGLE_TABLE和JOINED繼承映射策略的標識符列。

策略和鑑別器列僅在應用不同繼承策略的實體類層次結構或子層次結構的根中指定。

有沒有人有關於如何使這種映射的想法?

謝謝。

+0

因此,JPA允許每個繼承樹使用1個鑑別器。 – DataNucleus 2012-03-27 13:52:30

回答

0

刪除此:

@DiscriminatorColumn(name="DISCRIMINATOR_B",discriminatorType=DiscriminatorType.STRING) 

每個層級有鑑別列一次就夠了。此層次結構中的所有實體都將在TAB_A中有行(在實體A中定義)。如果使用聯合繼承策略(多個表),這也是足夠的。

的其他問題與您的映射: