1.立即检索策略
默认的检索策略。
缺点:
select语句的数目太多,需要频繁的访问数据库,会影响检索性能。如果需要查询n个Customer对象,那么必须执行n+1次select查询语句。
这种检索策略没有利用SQL的连接查询功能。利用left join 只需一条sql语句既可以实现N+1次查询的结果。并且可能造成内存空间的浪费。
2.延迟策略
在一对多关联级别中对于<set>元素,应该优先考虑使用延迟检索策略。
? 优点
– 由应用程序决定需要加载哪些对象,可以避免执行多余的select语句,以及避免加载应用程序不需要访问的对象。因此能提高检性能,并且能节省内存空间。
? 缺点
– 应用程序如果希望访问游离状态的代理类实例,必须保证它在持久化状态时已经被初始化。
? 适用范围
– 一对多或者多对多关联。
– 应用程序不需要立即访问或者根本不会访问的对象。
3.左外连接检索策略
? 在多对一关联级别中对于默认情况下,多对一关联使用左外连接检索策略。
? 如果把Order.hbm.xml文件的<many-to-one>元素的outer-join属性设为true,总是使用左外连接检索策略。
? 优点
– 1.对应用程序完全透明,不管对象处于持久化状态,还是游离状态,应用程序都可以方便的从一个对象导航到与它关联的对象。
– 2.使用了外连接,select语句数目少。
? 缺点
– 1.可能会加载应用程序不需要访问的对象,白白浪费许多内存空间。
– 2.复杂的数据库表连接也会影响检索性能。
? 适用范围
– 1.多对一或者一对一关联。
– 2.应用程序需要立即访问的对象。
– 3.数据库系统具有良好的表连接性能
4.备注:
Hibernate允许在应用程序中覆盖映射文件中设定的检索策略,由应用程序在运行时决定检索对象图的深度。
欢迎大家一起讨论学习!
有用的自己收!
记录与分享,让你我共成长!欢迎查看我的其他博客;我的博客地址:http://blog.csdn.net/caicongyang