2011-02-10 66 views
6

我需要擴展一個實體,具有相同的特性而不使用抽象類。用註解擴展hibernate實體

我可以編碼像下面的東西嗎?提前

@Entity 
@Table(name="ABC") 
@SequenceGenerator(sequenceName="SEQ_ABC",name="idGenerator",allocationSize=1) 
public class Abc { 
.. // define members 
} 

@Entity 
@Table(name="EX_ABC") 
public class ExAbc extends Abs { 
.. // define extras.. 
} 

THX

+1

你的意思是`擴展Abc`而不是`extends Abs`? – 2017-01-13 16:41:23

回答

15

是的,這一個工程沒有任何問題。但你應該看看inheritance annotation.

什麼問題:你有一個表「Abc」,其中包含field1,filed2;然後你有ExAbc,其中包含「Abc」字段和adition字段3。 現在,如果你認爲數據庫的話,那麼這個系統應該怎樣處理這兩個類呢?把它們放到一個表中讓所有類型爲「Abc」的行的field3 = null?或把它們放到兩個不同的表中?或者把普通的字段放在一個表中,併爲附加的字段創建第二個字段?

每種解決方案都有其優點和缺點,因爲您可以在我發佈的鏈接中閱讀,然後根據您的情況決定哪種方式是最佳方式。

(默認我認爲是加盟策略,但我不會說是如此對每個數據庫計數)

+0

THX的答案榮譽, 我的業務規則適合@Inheritance(策略= InheritanceType.TABLE_PER_CLASS), 但是當我取的記錄,我得到兩個父母和孩子記錄(UNION ALL),如何能我獲取特定的父母或孩子記錄。 thx再次提前 – emre 2011-02-10 16:21:30