2010-02-03 84 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