【发布时间】:2011-03-29 04:44:02
【问题描述】:
为什么 JPA 中的实体类不能是 final 或有 final 方法?引用自here -
实体类必须遵循以下要求:
...
该类不得声明为
final。不得声明任何方法或持久实例变量final。
是什么原因? JPA 是否对实体类进行子类化并重新定义方法?
【问题讨论】:
为什么 JPA 中的实体类不能是 final 或有 final 方法?引用自here -
实体类必须遵循以下要求:
...
该类不得声明为
final。不得声明任何方法或持久实例变量final。
是什么原因? JPA 是否对实体类进行子类化并重新定义方法?
【问题讨论】:
根据定义,实体是可以持久保存到数据库中的类,因此在最终将成为数据库中记录的内容的上下文中,拥有 final 字段是没有意义的。没有最终类和最终方法的要求与 JPA 实现实际处理实体类的持久实例的方式有关。
实现在运行时对类进行子类化和/或向类动态添加字节码以检测实体对象何时发生更改是很常见的。如果你的类被声明为 final,那么这是不可能的。
当然还有更多的原因,而不仅仅是这些,这里有一个article,它提供了更多关于 ORM 在幕后工作的一般信息,这可能有助于您更好地了解 JPA 实体的其他要求。
【讨论】:
因为持久性提供程序会代理对象。这些代理正在创建实体/类的运行时子类,并且还可能添加一些标志来识别数据是否发生变化。所以这就是为什么你的课程不应该是最终的有能力改变它。
【讨论】: