2010-02-03 81 views
14

我有很多抽象超類,我的具體類繼承了各種方法。其中一些方法需要在具體類中放置JPA或JAXB註釋。目前我通過以下方式執行此操作:將註釋添加到繼承方法的最佳方法

@MyLocalAnnotations 
@Override 
public method inheritedMethodHere (yadda yadda) 
    { 
    super.inheritedMethodHere(yadda yadda); 
    } 

有沒有辦法在不重寫此方法的情況下執行此操作?忽略只提供本地註釋的方法似乎是一種浪費。

+0

我還想補充說,我需要在具體子類中創建註釋的原因是因爲他們在JPA和JAXB中使用不同的表名。這種情況下的超類也是通用的。 – HDave 2010-02-03 14:54:54

回答

9

不幸的是,沒有比現在做的更好的方法。考慮到你的JPA註解將需要特定於具體類的信息,要做你描述的你必須重寫該方法。

使用JPA批註,實際上有兩個選項 - 您可以註釋方法,也可以註釋屬性。在我們的項目中,我們已經標準化了註釋屬性而不是方法,但這也不會對您有所幫助,因爲屬性可能是具體類的一部分。 (如果它們以某種方式在超類中共享,那麼你真的需要註釋這些方法並覆蓋它們)。

很難在沒有看到你的模式的情況下提出建議,但是如果你的實體類有很多共同點,以至於它們在超類中共享許多屬性 - 可能它們只存儲在同一個表中,區分類型列?

或者,如果他們是而不是幾乎相同,您是否可以重現每個具體類中的常見屬性?你可能會讓自己做更多的工作,而不是試圖捕捉超類中的共同屬性來保存自己。由於您必須在具體的類中單獨註釋它們,只需在具體的類中聲明它們即可。如果您需要與這些屬性進行交互的常用方法,則可以使用單獨的Utility類來捕獲這些函數。

在我們的項目中,我們有時會爲實體使用一個通用的超類,但它會捕獲一些關於實體的元數據 - 不會影響持久性邏輯。因此,抽象類中不需要JPA註釋(也不會有意義)。

+0

非常感謝您的反饋。在我的情況下,實體類是50%相似和50%不同!我將繼續使用單獨的表格來提高性能,並繼續使用上述方法。我通常還會在某些時候(不經常)註解訪問器方法,我們在其中有邏輯。 – HDave 2010-03-01 01:10:40