hibernate 懒加载在真正用到的时候才去加载,hibernate如何判断“真正用到”?

真正用到 4个字对计算机来说太抽象了,Google能搜到的关于懒加载原理的解释,只能到返回代理对象层面,返回PersistentSet,保存了session和owner,利用session去查。然后呢?什么时候去查??????是调get方法(很明显不是)还是toString,还是??????没解释了?
为什么调用get方法时,如果不给其赋值,像这样user.getRoleSet();不会发出sql,如果Set<Role> roles = user.getRoleSet();这样则发出sql?

泛舟湖上清波郎朗
浏览 577回答 3
3回答

慕标5832272

真正用到=在内存中开辟空间 比如:new 懒汉单例: public class LazySingleton { private static LazySingleton intance = null; private LazySingleton(){} public static synchronized LazySingleton getInstance() { if(intance == null) { intance = new LazySingleton(); } return intance; } } get时才new。

智慧大石

就是调用 get 方法的时候,应为返回的是代理对象,调用的 get 并不是原始的 get 方法,而是包装过的。此时代理对象会在 seesion 中检查是否 get 获取的对象已经存在,如果不存在就会发起一条 sql 去查询。如果处理不当会引起 N+1 问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java