2016-11-18 41 views
1

如何在同一繼承樹中將單表類型繼承與連接表類型混合? 我沒有使用hibernate只是JPA。 我知道沒有官方支持混合繼承閱讀JPA規範。 我無法更改架構。它確實與hibernate一起工作,但現在我需要使用openjpa來實現這一點。 我正在尋找一些解決方法。如何在JPA中混合繼承類型

+0

您需要添加一些上下文。你能發佈你正在嘗試的代碼嗎? – bradimus

+0

JPA很清楚地告訴你在樹的根目錄中指定繼承策略,這就是全部。你究竟能如何「混合」這個約束? –

回答

1

,這是爲我工作:

超類:

@Entity 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "TYPE_DISCRIMINATOR") 
public class A extends SomeClass implements SomeInteface { 


… 
@Id 
@Column(name = "ID", nullable = false, precision = 0) 
public Integer getPk() { 
    return super.getPk(); 
} 
… 

注意 「SomeClass的」 不是一個實體。

子類 - 「加盟」 繼承:

@Entity 
@SecondaryTable(name = "A_SECOND_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name ="ID")) 
@DiscriminatorValue("BD") 
public class B extends A implements SomeIntefaceB { 
… 

創建新表 「A_SECOND_TABLE」 與加入的超類主鍵 「ID」。 未在連接列,並出現在我們的餐桌的每個字段被標記這樣的:

@Basic 
@Column(table = "A_SECOND_TABLE", name = "STATUS", nullable = false, precision = 0) 

通知表中的值。

子類 - 單表繼承:

@Entity 
public class C extends A implements SomeIntefaceC {... 

簡單的單表繼承。