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

15

我有一些抽象超类,我的具体类继承了其中的各种方法。其中一些方法需要在具体类中放置 JPA 或 JAXB 注解。目前,我是通过以下方式实现的:

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

有没有一种方法可以不覆盖这个方法来实现?这样只为提供本地注释覆盖一个方法似乎很浪费。


我还想补充一点,我需要在具体的子类中创建注释的原因是因为它们在JPA中使用不同的表名,在JAXB中使用不同的元素名。在这种情况下,超类也是通用的。 - Dave
1个回答

9
很遗憾,现在没有比您现在所做的更好的方式。为了实现您描述的功能,您需要覆盖该方法,考虑到您的JPA注释需要与具体类相关的信息。
使用JPA注释,您实际上有两个选项--您可以注释方法,也可以注释属性。在我们的项目中,我们已经统一将注释放在属性中,但这也无济于事,因为属性可能是具体类的一部分。(如果它们以某种方式在超类中共享,则确实需要注释方法并覆盖它们)。
很难在不看到您的模式的情况下提出建议,但是如果您的实体类具有许多共同点以至于它们在超类中共享许多属性-它们可能只是存储在同一个表中,可能具有区分类型列?
或者,如果它们并非几乎相同,您是否只需在每个具体类中重复常见属性?尝试通过在具体类中声明它们并逐个进行注释来使自己更加劳累。如果您需要与这些属性交互的常见方法,则单独的Utility类来捕获这些函数可能是答案。
在我们的项目中,有时会使用通用的实体超类,但它会捕获有关实体的一些元数据,但不会影响持久性逻辑。因此,在抽象类中不需要(也没有意义)使用JPA注释。

感谢您认真思考并回复。在我的情况下,实体类有50%相似和50%不同!我将继续使用单独的表以提高性能,并继续使用上述方法。我通常还会注释访问器方法,因为有时(不经常)我们会在其中编写逻辑。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接