我有多对一的关系..所有懒惰的初始化但每次我查询关系的许多方面这创建另一个选择[另一个]并带来父母,我已阅读其他帖子在这里堆栈中说是有利于表现声明类最终的VTable重写方法但在其他帖子中他们说如果我与最终类有多对一的关系将带来关系的一方实际上我已经删除了最终修饰符在我的班级,一切都很好,现在我的问题是为什么最终修饰符导致关系的一方急切地获取即使所有懒惰的初始化感谢..
答案 0 :(得分:0)
final
关键字阻止任何人扩展该类并覆盖其任何方法。
为了实现延迟加载,hibernate通过代理替换多方父对象的实例。第一次调用它时,此代理从数据库加载父数据。
代理必须是Parent类的实例。但它不能是Parent类型,因为它的方法需要做其他事情:第一次调用时执行SQL查询。所以代理实际上是Parent的子类(在运行时动态生成)。要成为子类,Parent类不能是最终的。
因此必须避免在hibernate实体上使用final
,否则代理就会延迟加载。