get和load的区别:
get不支持延迟加载,而load支持。
当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常。
类(Class)的延迟加载:
设置<class>标签中的lazy="true",或是保持默认(即不配置lazy属性)
如果lazy的属性值为true,那么在使用load方法加载数据时,只有确实用到数据的时候才会发出sql语句;这样有可能减少系统的开销。
//不会发出查询sql
System.out.PRintln("group id=" + group.getId());
这里有一个问题,为什么加载主键的时候不需要发出sql语句。
将不执行select 查询,而是创建了group类的代理类实例,仅初始化OID属性,
在访问group类的OID主键属性时不会查询数据库
只有在第一次访问非OID属性时,才会执行SQL查询数据库
四、fetchLazy,延迟加载
Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。
5.1、lazy策略可以用在:并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据
5.3、Hibernate单端关联懒加载策略:即在<one-to-one>/<many-to-one>标签上可以配置注意:在class标签上配置的lazy属性不会影响到关联对象!!!
新闻热点
疑难解答