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语句用内连接来获取对象的数据和关联对象的数据,此时关联对象的懒加载失效。