繁体   English   中英

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

[英]Why can't entity class in JPA be final?

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

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

...

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM