首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体类和final关键字

实体类和final关键字
EN

Stack Overflow用户
提问于 2015-12-22 13:58:34
回答 2查看 6.3K关注 0票数 0

来自另一个线程

根据定义,实体是一个可以持久化到数据库的类,因此在最终成为数据库记录的内容的上下文中,使用最后一个字段是没有意义的。

有人能详细解释一下为什么最后一个字段没有意义吗?

EN

回答 2

Stack Overflow用户

发布于 2015-12-22 14:39:11

通常,持久化提供者使用一些库(如CGLIB或javassist )对对象进行代理。这些代理正在创建实体的运行时子类。这就是为什么他们不应该是最终的。

详细说明:

您可以使Hibernate实体类成为最终的,但这不是一个好的实践。由于Hibernate使用代理模式来提高性能,因此,在惰性关联的情况下,通过使实体最终确定,Hibernate将不再能够使用代理,因为Java不允许扩展最终类,从而限制了性能改进选项。但是,如果持久化类是接口的实现,则可以避免这个问题,它声明实体类中定义的所有公共方法。

代理是通过在运行时对对象(例如,学生实体类)进行子类动态创建的。子类覆盖父类的所有方法,当访问任何方法时,代理从DB加载实际对象并调用该对象上的实际方法。如果我们将实体类作为最终类,那么该实体类就不能被子类化,因为最终类不能被继承。

票数 5
EN

Stack Overflow用户

发布于 2015-12-22 14:15:40

您可以拥有它们,但它们将作为“瞬态”场被排除在持久性之外。这样他们就不会被装上子弹或者被拯救。这就是JPA的工作原理。

代码语言:javascript
复制
static int transient1; // not persistent because of static
final int transient2 = 0;  // not persistent because of final
transient int transient3; // not persistent because of transient
@Transient int transient4; // not persistent because of @Transient

因此,因为JPA需要一个无参数的构造函数,所以必须将构造函数或它的声明中的final设置为static中的固定值或其他东西。因此,它没有什么价值,如果它是这样使用的话,它会很难闻。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34417551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档