`
kangsg219
  • 浏览: 123128 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在Hibernate中检索策略的应用

阅读更多
Hibernate的检索策略包括类级别检索策略和关联级别检索策略。

类级别检索策略有立即检索和延迟检索,默认的检索策略是立即检索。在 Hibernate映射文件中,通过在<不着class>上配置lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load方法;也就说,对于get、qurey检索,持久化对象都会被立即加载而不管lazy是false还是true.一般来说,我们检索对象就是要访问它,因此立即检索是通常的选择。由于load方法在检索不到对象时会抛出异常(立即检索的情况下),因此我个人并不建议使用load检索;而由于< class>中的lazy属性还影响到多对一及一对一的检索策略,因此使用load方法就更没必要了。

关联级别检索策略有立即检索、延迟检索和迫切左外连接检索。对于关联级别检索,又可分为一对多和多对多、多对一和一对一两种情况讨论。

一对多和多对多关联关系一般使用< set>配置。< set>有lazy和outer-join属性,它们的不同取值绝对了检索策略。

1)立即检索:这是一对多默认的检索策略,此时lazy=false,outer-join=false.尽管这是默认的检索策略,但如果关联的集合是无用的,那么就不要使用这种检索方式。

2)延迟检索:此时lazy=true,outer-join=false(outer-join=true是无意义的),这是优先考虑的检索方式。

3)迫切左外连接检索:此时 lazy=false,outer-join=true,这种检索策略只适用于依靠id检索方式(load、get),而不适用于query的集合检索(它会采用立即检索策略)。相比于立即检索,这种检索策略减少了一条sql语句,但在Hibernate中,只能有一个配置成 outer-join=true.

多对一和一对一检索策略一般使用< many-to-one>、< one-to-one>配置。< many-to-one>中需要配置的属性是 outer-join,同时还需要配置one端关联的< class>的lazy属性(配置的可不是< many-to-one>中的lazy哦),它们的组合后的检索策略如下:

1) outer-join=auto:这是默认值,如果lazy=true为延迟检索,如果lazy=false为迫切左外连接检索。

2) outer-join=true,无关于lazy,都为迫切左外连接检索。

3) outer-join=false,如果lazy=true为延迟检索,否则为立即检索。

可以看到,在默认的情况下(outer-join=auto,lazy= false),对关联的one端对象Hibernate采用的迫切左外连接检索。依我看,很多情况下,我们并不需要加载one端关联的对象(很可能我们需要的仅仅是关联对象的id);另外,如果关联对象也采用了迫切左外连接检索,就会出现select语句中有多个外连接表,如果个数多的话会影响检索性能,这也是为什么Hibernate通过hibernate.max_fetch_depth属性来控制外连接的深度。对于迫切左外连接检索,query的集合检索并不适用,它会采用立即检索策略。

对于检索策略,需要根据实际情况进行选择。对于立即检索和延迟检索,它们的优点在于 select语句简单(每张表一条语句)、查询速度快,缺点在于关联表时需要多条select语句,增加了访问数据库的频率。因此在选择即检索和延迟检索时,可以考虑使用批量检索策略来减少select语句的数量(配置batch-size属性)。对于切左外连接检索,优点在于select较少,但缺点是 select语句的复杂度提高,多表之间的关联会是很耗时的操作。另外,配置文件是死的,但程序是活的,可以根据需要在程序里显示的指定检索策略(可能经常需要在程序中显示指定迫切左外连接检索)。为了清楚检索策略的配置效果如何,可以配置show_sql属性查看程序运行时Hibernate执行的 sql语句
分享到:
评论

相关推荐

    HIBERNATE检索策略

    标题:“HIBERNATE检索策略” 描述:本文深入解析了HIBERNATE的检索策略,为读者提供了一条清晰的学习路径,重点分析了HIBERNATE中的抓取策略及其应用场景,帮助开发者更有效地管理和优化数据加载过程。 在...

    Hibernate的检索策略

    在Java持久化框架Hibernate中,检索策略是一种重要的机制,它主要用于控制对象何时以及如何加载到应用程序内存中。合理的检索策略不仅可以提高应用性能,还能简化代码逻辑,使得开发过程更加高效。Hibernate支持两种...

    hibernate的延迟检索在轻量级J2EE框架中的应用

    ### Hibernate的延迟检索在轻量级J2EE框架中的应用 #### 1. 引言 随着互联网技术的发展,Web应用程序的需求日益增加,对于高效、快速的开发模式也提出了更高的要求。轻量级J2EE框架(Struts+Spring+Hibernate)因...

    基于Spring的Hibernate Search全文检索功能示例

    在现代Web应用开发中,全文检索功能已经成为提升...通过以上步骤,你可以在Spring应用中成功集成并使用Hibernate Search实现全文检索功能。记住,实际项目中需要根据具体需求进行调整和优化,以达到最佳的搜索体验。

    hibernate的检索

    【Hibernate检索策略】 Hibernate提供三种主要的检索策略:立即检索、延迟检索和迫切左外连接检索。 1. **立即检索**:这种策略将立即加载关联的对象,无论对象是持久化状态还是游离状态。优点是应用程序可以方便...

    hibernate中文参考手册

    在Hibernate中,核心概念包括实体(Entities)、持久化类(Persistent Classes)、会话(Sessions)、事务(Transactions)和查询(Queries)。实体是应用程序中的业务对象,它们对应数据库中的表;持久化类是包含@...

    hibernate基础 注解开发 检索

    注解作为Java SE 5引入的新特性之一,在Hibernate中被广泛应用于配置实体类和关联关系。 ##### PO类注解配置(掌握) - **@Entity**:声明类为一个实体,即该类将映射到数据库中的某个表。 - **@Table**:用于指定...

    hibernate中文参考文档pdf

    Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在Java应用程序中管理和持久化数据到关系数据库的方法。ORM框架能够将复杂的SQL操作和数据库交互转化为简单的对象操作,极大地提高了开发...

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    本教程将深入探讨"day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询"的主题,通过源码分析和实际工具的应用,来提升数据库查询的效率。 首先,我们了解Hibernate的检索方式。在Hibernate中,...

    Hibernate知识点总结

    在Hibernate中,检索策略是指控制对象何时从数据库加载到内存中。常见的检索策略有: - **立即检索**:对象被加载时立即加载关联的对象。 - **延迟检索**:只有当需要访问关联对象时才加载。 通过以上内容,我们...

    hibernate中文文档

    Hibernate是一款强大的Java持久化框架,它为Java开发者提供了一种对象关系映射(ORM)解决方案,使得在Java应用中管理数据库变得更为简单。这个“hibernate中文文档”压缩包包含的是Hibernate框架的中文版API文档,...

    Hibernate 4.1.1中文文档

    11. **性能优化**:文档还涵盖了如何优化Hibernate应用,如延迟加载、批处理更新、选择合适的检索策略等。 总的来说,《Hibernate 4.1.1中文文档》是学习和掌握Hibernate的重要资源,它包含了大量的示例代码和解释...

    hibernate3 hibernate3

    在本篇文章中,我们将深入探讨Hibernate3的核心概念、主要功能以及如何在实际项目中应用。 一、Hibernate3核心概念 1. 实体(Entity):在Hibernate中,实体代表数据库中的表,是Java类的一个实例。通过在类上使用...

    关于Clob类型在Hibernate中 的应用小结-- 一篇使用心得.zip

    总的来说,Clob在Hibernate中的应用主要是为了处理大型文本数据,通过合理的设计和优化,可以有效地存储和检索这些数据。在实际项目中,开发者需要根据具体需求和性能考虑来选择是否使用Clob,以及如何最佳地使用它...

    使用 hibernate-search 实现全文检索及文档管理的例子

    在Java开发中,全文检索和文档管理是常见的需求,特别是对于大型的企业级应用。Hibernate Search是Hibernate ORM框架的一个扩展,它提供了对数据库中的对象进行全文检索的能力,使得我们可以高效地在大量数据中找到...

    Hibernate Hibernate5 讲义 PDF

    在企业级应用中,对象序列化适合少量对象的持久化,但不符合大规模查询和长时间保存的需求。因此,除了对象序列化外,还有JDBC直接操作和ORM等持久化解决方案。 ORM框架,比如Hibernate,是对象持久化的高级抽象。...

    Hibernate 3.1.2中文文档

    Hibernate是一款开源的...阅读Hibernate 3.1.2中文文档,不仅可以了解这些基本概念,还能深入学习到如检索策略、批处理、缓存优化等进阶主题,这对于任何希望掌握Hibernate或者ORM技术的Java开发者来说都是宝贵的资源。

Global site tag (gtag.js) - Google Analytics