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类的延迟加载有了新的实现方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值