向继承方法添加注释的最佳方法

时间:2010-02-03 14:43:46

标签: java jpa inheritance jaxb annotations

我有许多抽象超类,我的具体类继承了各种方法。其中一些方法需要在具体类中放置JPA或JAXB注释。目前我通过以下方式执行此操作:

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

有没有办法在不覆盖方法的情况下执行此操作?将覆盖方法仅用于提供本地注释似乎是一种浪费。

1 个答案:

答案 0 :(得分:9)

不幸的是,没有比你现在做的更好的方法了。要完成您所描述的内容,您必须覆盖该方法,因为您的JPA注释需要特定于具体类的信息。

使用JPA注释,您实际上有两个选项 - 您可以注释方法,或者您可以注释属性。在我们的项目中,我们已经标注了注释属性而不是方法,但这也无济于事,因为属性可能是具体类的一部分。 (如果它们以某种方式在超类中共享,那么你真的需要注释方法,并覆盖它们。)

很难在没有看到你的架构的情况下提出建议,但是如果你的实体类有很多共同点,它们在超类中共享许多属性 - 可能它们只是存储在同一个表中,也许是区别的类型列?

或者,如果它们几乎相同,您是否可以在每个具体类中重现常见属性?通过尝试捕获超类中的公共属性,您可能会让自己更多地工作而不是自救。由于您必须在具体类中单独注释它们,因此只需在具体类中声明它们即可。如果您需要与这些属性交互的常用方法,则可以使用单独的Utility类来捕获这些函数。

在我们的项目中,我们有时会为实体使用公共超类,但它会捕获有关实体的一些元数据 - 不会影响持久性逻辑。因此,抽象类中不需要JPA注释(它们也没有意义)。