为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

真正用到=在内存中开辟空间

比如: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。

查看完整回答
反对 回复 2019-03-01
?
智慧大石

TA贡献1946条经验 获得超3个赞

就是调用 get 方法的时候,应为返回的是代理对象,调用的 get 并不是原始的 get 方法,而是包装过的。此时代理对象会在 seesion 中检查是否 get 获取的对象已经存在,如果不存在就会发起一条 sql 去查询。如果处理不当会引起 N+1 问题。

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 576 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信