1

我有多对一的关系..所有延迟初始化但每次我查询关系的多方面都会创建另一个选择[另一个]并带来父级,我在堆栈中的其他帖子上读过说是好的为了性能,声明 VTable 覆盖方法的最终类,但在其他帖子中,他们说如果我与最终类有多对一关系,则会带来关系的一方面,事实上我已经删除了我的类中的最终修饰符现在一切都好,我的问题是为什么 final 修饰符会导致关系的一侧急切地获取,即使所有延迟初始化谢谢..

4

1 回答 1

1

final关键字防止任何人扩展该类并覆盖其任何方法。

为了实现延迟加载,hibernate 用代理替换了多端的父对象的实例。第一次调用时,这个代理从数据库中加载父节点的数据。

代理必须是 Parent 类的实例。但它不能是 Parent 类型,因为它的方法需要做其他事情:在第一次调用它们时执行 SQL 查询。所以代理实际上是Parent的一个子类(在运行时动态生成)。并且要成为子类,父类不能是最终的。

因此final必须避免在休眠实体上使用,否则代理和延迟加载将不起作用。

于 2013-07-05T16:01:59.110 回答