HDa*_*ave 14 java inheritance annotations jpa jaxb
我有一些抽象的超类,我的具体类继承了各种方法.其中一些方法需要在具体类中放置JPA或JAXB注释.目前我通过以下方式执行此操作:
@MyLocalAnnotations
@Override
public method inheritedMethodHere (yadda yadda)
{
super.inheritedMethodHere(yadda yadda);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在不覆盖方法的情况下执行此操作?将覆盖方法仅用于提供本地注释似乎是浪费.
不幸的是,没有比你现在做的更好的方式了.要执行您所描述的操作,您必须覆盖该方法,因为您的JPA注释将需要特定于具体类的信息.
使用JPA注释,您实际上有两个选项 - 您可以注释方法,或者您可以注释属性.在我们的项目中,我们已经标注了注释属性而不是方法,但这也无济于事,因为属性可能是具体类的一部分.(如果它们以某种方式在超类中共享,那么你真的需要注释方法,并覆盖它们).
很难在没有看到你的模式的情况下提出建议,但是如果你的实体类有很多共同之处,它们在超类中共享许多属性 - 它们可能只是存储在同一个表中,可能还有一个差异化的类型列?
或者,如果它们几乎不相同,您是否可以在每个具体类中重现常见属性?通过尝试捕获超类中的公共属性,您可能会让自己更多地工作而不是自救.由于您必须在具体类中单独注释它们,因此只需在具体类中声明它们即可.如果您需要与这些属性交互的常用方法,则可以使用单独的Utility类来捕获这些函数.
在我们的项目中,我们有时会为实体使用公共超类,但它会捕获有关实体的一些元数据 - 这些都不会影响持久性逻辑.因此,抽象类中不需要JPA注释(它们也没有意义).
| 归档时间: |
|
| 查看次数: |
2931 次 |
| 最近记录: |