编程教学网站推荐,社区推广方法有哪些,做响应式网站的流程,wordpress同类Hibernate的Session在加载一个Java对象时#xff0c;可以将与这个对象相关联的其他Java对象都加载到缓存中#xff0c;以便程序及时调用。但有些情况下#xff0c;我们不需要加载太多无用的对象到缓存中#xff0c;一来这样会撑爆内存#xff0c;二来增加了访问数据库的次… Hibernate的Session在加载一个Java对象时可以将与这个对象相关联的其他Java对象都加载到缓存中以便程序及时调用。但有些情况下我们不需要加载太多无用的对象到缓存中一来这样会撑爆内存二来增加了访问数据库的次数。所以为了合理的使用缓存Hibernate提供了几种检索策略来供用户选择。 Hibernate的检索策略 在Hibernate中主要有三种检索策略它们是立即检索策略、延迟检索策略、左外连接检索策略。下面分别介绍一下这三种检索策略。 立即检索策略 采用立即检索策略会将被检索的对象以及和这个对象关联的一对多对象都加载到缓存中。Session的get方法就使用的立即检索策略。 优点频繁使用的关联对象能够被加载到缓存中。 缺点1、占用内存。2、Select语句过多。 延迟检索策略 采用延迟检索策略就不会加载关联对象的内容。直到第一次调用关联对象时才去加载关联对象。在不涉及关联类操作时延迟检索策略只适用于Session的load方法。涉及关联类操作时延迟检索策略也能够适用于getlist等操作。 在类级别操作时 延迟检索策略只加载类的OID不加载类的其他属性只用当第一次访问其他属性时才回访问数据库去加载内容。这里使用了CGLIB生成了类的代理类 在关联级别操作时延迟检索策略只加载类本身不加载关联类直到第一次调用关联对象时才去加载关联对象 程序模式都是用延迟加载策略。如果需要指定使用延迟加载策略。在配置文件中设置class的lazytrueset的lazytrue或extra增强延迟many-to-one的lazyproxy和no-proxy。 优点由程序决定加载哪些类和内容避免了大量无用的sql语句和内存消耗。 缺点在Session关闭后就不能访问关联类对象了。 需要确保在Session.close方法前调用关联对象。 左外连接检索策略 采用左外连接检索能够使用Sql的外连接查询将需要加载的关联对象加载在缓存中。 setfetch设置为joinmany-to-one的fetch设置为 join 优点1对应用程序完全透明不管对象处于持久化状态还是游离状态应用程序都可以方便的从一个对象导航到与它关联的对象。2使用了外连接select语句数目少。 缺点1可能会加载应用程序不需要访问的对象白白浪费许多内存空间。2复杂的数据库表连接也会影响检索性能。 batch-size属性 无论是立即检索还是延迟检索都可以指定关联查询的数量这就需要使用batch-size属性来指定指定关联查询数量以减少批量检索的数据数目。 转载于:https://www.cnblogs.com/wukong0214/archive/2013/01/23/2874026.html