【发布时间】:2015-07-04 00:02:36
【问题描述】:
我正在学习 JPA,所以在学习 JPA BLOG Vogella 1.2 Entity Heading 时,我遇到了这样一句话:
所有实体类必须定义一个主键,必须有一个非参数 构造函数和或不允许是最终的
我无法理解这条线。我们是否需要专门编写一个无参数构造函数,因为默认的无参数构造函数总是被类继承。
不允许成为 final 是什么意思,这是否意味着我们总是可以扩展实体类?如果是,为什么是这种强迫,为什么不能是最终的
【问题讨论】:
-
当构造函数重载时,需要实体中的默认构造函数。实体类可以被代理。任何可代理的类都不能是最终的,例如 EJB 和 CDI bean。如果您尝试使它们成为最终版本,您将收到一个编译时错误(类似的东西 -
Class is unproxyable)。 -
我可以理解 JPA 使用了类代理之类的概念,它需要类是非最终的。它是否类似于提到的延迟数据加载。我想我需要研究这两个概念,我还没有听说过。
-
FWIW 并非所有实现都使用“类代理”,因此并非所有实现都有这个“最终”限制。
标签: java hibernate jpa eclipselink entitymanager