向继承的方法添加批注的最佳方式

2022-09-04 04:04:34

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

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

有没有办法在不覆盖方法的情况下执行此操作?重写一个方法只是为了提供本地注释似乎是一种浪费。


答案 1

不幸的是,没有比你现在正在做的事情更好的方法了。要执行您所描述的操作,您必须重写该方法,因为您的 JPA 注释将需要特定于具体类的信息。

使用 JPA 注释,您实际上有两个选择 - 您可以注释方法,也可以注释属性。在我们的项目中,我们已经对属性而不是方法进行了标准化,但这对你也没有帮助,因为这些属性可能是具体类的一部分(如果它们以某种方式在超类中共享,那么你真的需要注释方法,并重写它们)。

很难在没有看到您的架构的情况下提出建议,但是如果您的实体类具有如此多的共同点,以至于它们在超类中共享许多属性 - 它们是否可以简单地存储在同一个表中,也许带有区分类型列?

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

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


答案 2

推荐