2011-08-24 33 views
1

我想知道是否有任何意義(或者即使它是正確的)用@Inheritance註解每一個層次結構的類。例如,假設我們有以下簡單的層次結構:將JPA的2.0 @Inheritance註釋用於子類是否有意義?

public class A { ... } 
public class B extends A { ... } 
public class C extends A { ... } 

爲了保存這些類的對象,我們就標註A類如下:

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
public class A { ... } 

我的問題是,我們需要將@Inheritance註釋添加到類B和C也?正如Javadoc所說「它是作爲實體類層次結構的根的實體類指定的。」所以我的潛在答案是,不!但是,如果我們對它們進行註釋,這是否有任何意義,還是完全被忽略?

感謝

回答

0

您需要@Inheritance註解添加到子類,如果你需要使用非默認InheritanceType。

如您所知,支持3種繼承類型。每個類層次結構的表,每個子類的表和每個具體類的表。 InheritanceType.SINGLE_TABLE默認情況下使用,並且您的所有父類和子類對象將被放置在一個表中。

如果要使用InheritanceType.JOINED或InheritanceType.TABLE_PER_CLASS,則需要添加@Inheritance註釋。

+0

只是爲了澄清一點。我已經用InheritanceType.JOINED註釋了基類。我的問題是:是否有效/合法/有意義的還註釋一個子類,也許選擇另一個繼承類型(例如InheritanceType.TABLE_PER_CLASS)? – gpol

+0

如果您想爲Subclass1使用JOINED,爲Subclass2使用TABLE_PER_CLASS,則應該爲每個子類添加註釋。另外,不需要向超類添加註釋。 如果您爲超類添加註釋,則所有沒有註釋的子類都應該使用它。 –

+0

所以,如果我用JOINED註解類A,根據你說的我應該有的類B留下類B和註釋類C: – gpol

相關問題