本文主要是介绍Hibernate中的Entity类未必final,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Hibernate中定义的Entity类(无论是JPA实现,还是Hibernate Native实现),都建议Entity类是final的,但这不是必须的。
事实上,如果不考虑利用Entity类的延迟加载特性,那么Entity类无需是final的。
Hibernate中Entity类的延迟加载是通过运行时动态代理实现的。而Java动态代理实现中,要求被代理类(就是这里的Entity类)不能是final的,其中的实例变量也不能是final的。这是因为Java动态代理是通过创建Entity类的子类对象并强制转换为Entity类对象,实现被代理对象的。而final的Entity类是无法被继承的,因而也就没有子类了。
Hibernate的动态代理实现还要求Entity类必须实现接口,Entity类为实例变量定义getter/setter方法。
不过,从Hibernate 5开始,Hibernate利用CGLIB和ASM支持了更底层的对Java字节码的增强技术,这使得Entity类的延迟加载有了新的实现方式。
这篇关于Hibernate中的Entity类未必final的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!