【问题标题】:Why can't entity class in JPA be final?为什么 JPA 中的实体类不能是最终的?
【发布时间】:2011-03-29 04:44:02
【问题描述】:

为什么 JPA 中的实体类不能是 final 或有 final 方法?引用自here -

实体类必须遵循以下要求:

...

该类不得声明为final。不得声明任何方法或持久实例变量final

是什么原因? JPA 是否对实体类进行子类化并重新定义方法?

【问题讨论】:

标签: java jpa


【解决方案1】:

根据定义,实体是可以持久保存到数据库中的类,因此在最终将成为数据库中记录的内容的上下文中,拥有 final 字段是没有意义的。没有最终类和最终方法的要求与 JPA 实现实际处理实体类的持久实例的方式有关。

实现在运行时对类进行子类化和/或向类动态添加字节码以检测实体对象何时发生更改是很常见的。如果你的类被声明为 final,那么这是不可能的。

当然还有更多的原因,而不仅仅是这些,这里有一个article,它提供了更多关于 ORM 在幕后工作的一般信息,这可能有助于您更好地了解 JPA 实体的其他要求。

【讨论】:

  • 谢谢!我知道 final 字段,但我不确定 final 方法/类。
  • 请注意,从数据库中加载不可变类非常有意义。
【解决方案2】:

因为持久性提供程序会代理对象。这些代理正在创建实体/类的运行时子类,并且还可能添加一些标志来识别数据是否发生变化。所以这就是为什么你的课程不应该是最终的有能力改变它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2013-11-02
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多