懒加载

 1、懒加载:是指程序推迟访问数据库,这样做可以保证有时候不必要的访问数据库,因为每次访问数据库都是比较耗时的即只有真正使用该对象的数据时才会创建。Hibernate中主要是通过代理机制来实现延迟加载:Hibernate从数据库获取某一个对象数据时、获取某一个对象的集合属性值时,或获取某一个对象所关联的另一个对象时,由于没有使用该对象的数据,hibernate并不是数据库加载真正的数据,而只是为该对象创建一个代理对象来代表这个对象,这个对象上的所有属性都是默认值;当在真正需要使用该对象的数据时才创建这个真实对象,真正从数据库中加载它的数据,从而减少所耗的时间。

2、Load()方法的懒加载:如否在session关闭之前没有对数据库进行访问或进行队所有load对象进行初始化,则会报错。因为在访问数据库之前load()方法懒加载返回的是一个代理对象,不能获取到他得属性。如果在session关闭前访问了数据库或者队load进行了初始化。则会访问数据库查询并给代理复值。

 

3、hibernate默认都是使用懒加载的。如果定义的查询方法,没有队实例化中的代理对象进行初始化,却调用了此方法会报错。因为session关闭前没有对其初始化。

a)        当调用session上的load()加载一个实体时,会采用延迟加载。

b)        当session加载某个实体时,会对这个实体中的集合属性值采用延迟加载

c)        当session加载某个实体时,会对这个实体所有单端关联的另一个实体对象采

4、session.load懒加载。

5、one-to-one(元素)懒加载:

       懒加载默认是关闭的,只有基于外键关联方式的“一对一”才用懒加载。必需同时满足下面三个条件时才能实现懒加载

       (主表不能有constrained=true,所以主表没有懒加载)

       lazy!=false 2)constrained=true 3)fetch=select

6、one-to-many (元素)懒加载:

       当我们查询的是主对象时,将person和idcard外连接查询出person对象和idcard对象没有懒加载。当我们查询的是从对象时,对于idcard所关联的person对象是懒加载。

       这种关联方实质性懒加载是非常有效的,Hibernate默认对它就是使用懒加载的,默认就是以下条件:

1)lazy!=false 2)fetch=select

7、.many-to-one (元素) :

有没有都可以,因为执行效率不明显,默认执行条件:

1)lazy!=false 2)fetch=select

8、.many-to-many (元素) :

这种关联方实质性懒加载是非常有效的,Hibernate默认对它就是使用懒加载的,默认就是以下条件:

1)lazy!=false 2)fetch=select

9、.能够懒加载的对象都是被改写过的代理对象,当相关联的session没有关闭时,访问这些懒加载对象(代理对象)的属性(getId和getClass除外)hibernate会初始化这些代理,或用Hibernate.initialize(proxy)来初始化代理对象;当相关联的session关闭后,再访问懒加载的对象将出现异常。

10、            抓取策略

a)        select:作为默认值,它的策略是当需要使用到关联对象的数据时另外单独发送select语句,抓取当前对象的关联对象的数据。即懒加载。

b)        join:他的策略时使用一条select语句用内连接来获取对象的数据和关联对象的数据,此时关联对象的懒加载失效。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值