为什么JPA中的实体类不能是最终的?

为什么JPA中的实体类不能是最终的或者有最终方法? 引用这里 –

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

不得将该类声明为final 。 没有方法或持久化实例变量必须声明为final

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

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

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

当然有更多的理由不仅仅是那些,这里有一篇文章提供了有关ORM一般如何工作的更多信息,可能有助于您更好地理解JPA实体的其他要求。

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