日期:2014-05-18  浏览次数:20712 次

lazy(懒加载)到底什么意思?
以前自学的SSH,由于长时间没用了,最近几天比较空闲了。所以想复习一下。
但是现在对于hebernate配置文件中的一个属性lazy非常疑惑,查了一些相关资料,还是不能充分理解。
往知道的朋友解释一下,最好详细一点。

------解决方案--------------------
比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来。但是实际上有时候只是需要用到部门的信息,不需要用到员工的信息,这时员工po的加载就等于浪费资源。如果lazy设置为true,那么只有当你访问部门po的员工信息时候才回去加载员工的po的信息。
------解决方案--------------------
比如A类有个属性b,这个属性是B类的一个对象。那么在数据库里面,A对象和B对象是存储在不同的表里面的。如果是懒加载,那么当加载A类的对象a的时候,不会同时从数据库里面加载对象b,也就是说,这时候a对象的属性b其实是一个代理对象。只有当实际需要使用a.b的时候,才会从数据库里面加载对象b,将b从一个代理换成真实的含有从数据库中加载的信息的对象b。
------解决方案--------------------
延迟加载啊.
比如
Query query = session.createQuery("from Customer");
List list = query.list();
如果是立即加载的话.
上面的代码一执行就会立刻执行sql语句.
可是如果 laze="true"
的话
就只有等到 迭代 集合中的对象 并调用 customer.getXXX();(XXX 为非OID 字段)
才去执行sql语句.
------解决方案--------------------
延迟加载:
还有类级别的,和关联级别的.
lz 还是要多看书. 孙卫琴的那本 Hibernate 就很不错哦!
------解决方案--------------------
系统学学hibernate基础

若果缓存命中率教高的话 就体现了lazyloading
------解决方案--------------------
好像是 建表的时候没有建立 主外键关系也会报错。你可以重新建表然后重新映射一下试试。