gpt4 book ai didi

jpa - 真的所有 JPA 实体类方法都不能是最终的吗?

转载 作者:行者123 更新时间:2023-12-04 23:57:02 35 4
gpt4 key购买 nike

JPA 2.1 规范说:

The entity class must not be final. No methods or persistent instance variables of the entity class may be final.

“无方法”真的意味着每一个方法——privatestaticprotected、非状态改变等——在实体类中?或者这是否应该表示只有使用 @Access(AccessType.PROPERTY) 注释的方法才被禁止成为 final

我理解了为什么实体类不能是final,我理解了为什么实体类的持久化实例变量不能是final。我也理解为什么持久属性访问器和修改器不能是 final

我不明白为什么所有其他方法(例如,操作transient 字段的方法,或者是无状态的,或者static,或者private) 不能是 final

我能推测的最好的是规范希望为字节码注入(inject)在任何地方敞开大门——例如也许我的无状态方法对 getter 的调用需要重写该调用以调用某种 JPA 提供程序注入(inject)的方法。

当然,这种限制使得很难将来自 Elsewhere 的类实体类重用为构建 block ,因为其中一些可能具有 final 方法,但在所有其他方面都适合使用 orm.xml 从而转换为 JPA 实体。

最佳答案

我认为这只是问题的错误表述,这意味着它不是所有方法。

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

与访问器/修改器以外的其他方法相关,我认为不将它们设置为 final 是有意义的,因为要找出一个方法是否访问持久数据真的很复杂。如果该方法是私有(private)的,那仍然可能是个问题,因为您可以通过反射调用它。

另外,据我所知,我在 JPA 2.0 中发现了另一个表述不明确的地方(我的测试已经展示了如何解释它)。

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

关于jpa - 真的所有 JPA 实体类方法都不能是最终的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20623151/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com