【问题标题】:Hibernate ManyToOne Lazy not Working final ClassHibernate ManyToOne Lazy not Working final Class
【发布时间】:2013-07-05 13:43:55
【问题描述】:
我有多对一关系..所有延迟初始化但每次我查询关系的多方面都会创建另一个选择[另一个]并带来父级,我已经阅读了堆栈中的其他帖子说对性能有好处 为 VTable 覆盖方法声明类 final 但是在其他帖子中他们说如果我与 final 类有多对一关系,那么实际上我已经删除了 final 修饰符在我的课堂上,一切都很好,现在我的问题是为什么 final 修饰符会导致关系的一侧急切地获取,即使所有延迟初始化谢谢..
【问题讨论】:
标签:
java
hibernate
criteria
final
many-to-one
【解决方案1】:
final 关键字可防止任何人扩展该类并覆盖其任何方法。
为了实现延迟加载,hibernate 用代理替换了多端的父对象的实例。第一次调用时,这个代理从数据库中加载父级的数据。
代理必须是 Parent 类的实例。但它不能是 Parent 类型,因为它的方法需要做其他事情:在第一次调用它们时执行 SQL 查询。所以代理实际上是Parent的一个子类(在运行时动态生成)。而且要成为子类,Parent类不能是final的。
所以final 必须避免在休眠实体上使用,否则代理和延迟加载将不起作用。