hibernate的延迟加载

(1):延迟加载的概念

Hibernate从数据库获取某一个对象数据,获取某个对象的集合属性时、获取某个对象锁关联的另一个对象时,由于没有使用这个数据,hibernate不会从数据库真正加载这个数据,而是创建一个代理对象来代替该对象,代理对象所有属性赋默认值,真正需要该对象数据时才从数据库加载该对象数据。

to boils down :数据用到时再查sql从数据库取

(2):延迟加载的情况

1、session.load()方法加载实体时,获取到的是代理对象,属于延迟加载

	//返回一个代理对象 load()延迟加载
    Account acc=(Account)session.load(Account.class,new Long(1));
  
   //get()立即加载,访问标识符属性,不会初始化代理对象,没有发送sql查询数据库,返回null
   System.out.println(acc.getId());
   
   //查询对象属性,get()立即加载,创建真实对象,去数据库查询sql返回数据
   System.out.println(acc.getLoginName());
 tip: get方法不支持延迟加载,get方法查询表中没有记录时不会报错
 	  load()方法查询对象不存在时会报异常,ObjectNotFoundException

2、query.iterate()
3、Session加载某个实体时,会对单端关联的实体延迟加载
4、关联映射
5、Fetch =lazy

(3):延迟加载的好处

1、降低了内存开销
2、避免加载程序中不需要访问的关联对象,提高应用程序的性能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值