优点:对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象;
缺点: (1)select语句太多;
(2)可能会加载应用程序不需要访问的对象白白浪费许多内存空间;
说明: 需要频繁的访问数据库,会影响检索性能。如果需要查询n个Emp对象,那么必须执行n+1次select查询语句;
在应用逻辑只需要访问Emp对象,而不需要访问Dept对象的场合,加载Dept对象完全是多余的操作,这些多余的Dept对象白白浪费了许多内存空间
2)延迟检索优点:由应用程序决定需要加载哪些对象,可以避免可执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检索性能,并且能节省内存空间;
缺点:应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化;
说明:<set name="dept" inverse="true" lazy="true" >
适用范围:(1)一对多或者多对多关联。(2)应用程序不需要立即访问或者根本不会访问的对象。
优点:(1)对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便地冲一个对象导航到与它关联的对象。
(2)使用了外连接,select语句数目少;
缺点:(1) 可能会加载应用程序不需要访问的对象,白白浪费许多内存空间;
(2)复杂的数据库表连接也会影响检索性能;
说明:Dept.hbm.xml文件的<many-to-one name="dept" class="com.hlx.entity.Dept" fetch="join">则使用迫切左外连接检索策略。