2013-12-16 54 views
3

JPA 2.1规范说:所有JPA实体类方法都不是最终的吗?

实体类一定不能是最终的。实体类的方法或持久化实例变量可能是最终的。

是否“没有办法”的真正含义是每一个方法 - privatestaticprotected,非国有变化等,在实体类?或者,这是否应该表明只有注有@Access(AccessType.PROPERTY)的方法才被禁止为final

我知道为什么实体类不能为final,我理解为什么实体类的持久实例变量不能为final。我也明白为什么持久性属性访问器和增变器不能是final

我不明白为什么所有其他方法(那些操纵transient领域,例如,或者是无状态的,或static,或private)不能final。我可以推测的最好的事情是,规范想要为任何地方的字节码注入敞开大门 - 例如,也许我的无状态方法调用getter需要重写该调用以调用某种类型的JPA提供程序注入方法。

当然这个限制使得难以重用实体类从其他地方作为构建块,因为其中一些可能具有final方法,但是以其他任何方式适合用于扩充orm.xml并因此用于转换为JPA实体。

回答

0

我认为这只是一个坏的问题的表述,这意味着它不是每个方法。

由于静态方法没有绑定到特定的实体实例,这意味着它将是非常愚蠢的改变/控制该静态方法的行为。想象一下,何时从与持久性无关的上下文中调用它。所以这就是为什么我认为这是一个公式错误。

除了accesors/mutators之外的其他方法相关,我认为最好不要使用它们,因为找到一个方法是否访问持久数据非常复杂。如果该方法是私有的,那么这仍然是一个问题,因为您可以用反射来调用它。另外,据我记忆,我在JPA 2.0中发现了另一个地方,它是模糊的,并且我的测试显示了如何解释它。

PS:当然这只是我的看法,并不是基于任何文章或官方文档。

相关问题