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

Hibernate 检索策略

阅读更多

Hibernate的检索策略可以分为类级别的检索策略和关联级别的检索策略。

类级别可选的检索策略包括:立即加载和延迟加载,在类级别上,hibernate默认的检索策略为延迟加载,即lazy=ture

类级别的load检索策略:

立即加载:

    Customer customer = (Customer)session.load(Customer.class,new Long(1));

    当上面一条语句执行到时,hibernate会立即输出以下语句:

    select * from customers where id = 1;

    这个时候customer就已经实例化了。

延迟加载:

    Customer customer = (Customer)session.load(Customer.class,new Long(1));

    上面语句执行到时hibernate不会立即查询customer表,而是返回customer类的代理类的实例。

     这个代理类有以下的特征:

     1)Hibernate在运行时动态生成,它扩展了customer类,因此它继承了customer的所有属性和方法,但是它的实现对于应用程序是透明的。

     2)当hibernate创建customer代理类实例时,仅仅初始化了它的OID,其他属性都为null,因此这个代理类占用的内存很少。

     3)当程序第一次访问代理类的实例时,hibernate会初始化代理类实例,这时才真正区数据库查询。但是如果仅仅是方位代理类的getId(),hibernate仍然不会区访问数据库。

以上讨论的是类级别load的检索策略,如果是使用session的get 和 find接口进行数据查询的话不关class的检索策略设置为什么都会使用立即检索策略。

   如果使用load进行查询(不关是立即加载还是延迟加载),都会生成customer的代理类实例,这样我们在判断customer==null时就一定为false,而不能准确的知道数据库中是否存在这样的实例。

   (不推荐使用load,用起来麻烦)



关联级别的检索策略

关联级别的检索策略分为立即检索(默认的检索方式)、延迟检索和outer-join检索


batch-size的使用

在进行立即检索的时候,例如使用如下的sql语句:select * from customer;会立即去加载customer所关联的order对象,并且会产生多条select 语句,一个customer执行一次,而如果使用batch-size属性,会一次加载多条customer的order list,这样就会减少和数据库的交互。同样,在进行延迟加载的时候也会出现这样的问题。



fetch 和 lazy 主要是用来级联查询的,    而 cascade 和 inverse 主要是用来级联插入和修改的

分享到:
评论

相关推荐

    HIBERNATE检索策略

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

    Hibernate的检索策略

    ### Hibernate的检索策略详解 #### 一、概述 在Java持久化框架Hibernate中,检索策略是一种重要的机制,它主要用于控制对象何时以及如何加载到应用程序内存中。合理的检索策略不仅可以提高应用性能,还能简化代码...

    hibernate的检索

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

    hibernate5--4.检索方式及策略

    一、Hibernate检索方式 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是基于类和对象的。你可以通过HQL来查询、更新和删除对象,而无需关心底层的SQL语法。...

    hibernate面试题2

    1. **Hibernate检索策略**: - **立即检索(Eager Fetching)**:优点在于透明度高,方便导航关联对象,但可能导致过多的SELECT语句和内存浪费。 - **延迟检索(Lazy Fetching)**:应用程序可以根据需要决定何时...

    SSH笔记-检索策略(lazy、fetch、batch-size)

    SSH笔记主要涵盖了Spring、Struts和...SSHnote_Retrieval文件可能包含的是关于SSH框架特别是Hibernate检索策略的详细示例代码、配置文件或教程,通过阅读和实践这些内容,可以帮助开发者深入理解和应用上述知识。

    Hibernate3.2整套源码

    3. **Hibernate检索策略**:包括“立即加载”和“延迟加载”,可以根据需求选择何时加载关联的对象。 4. **类型系统增强**:增加了对枚举类型的支持,以及更加灵活的类型转换机制。 5. **JPA支持**:Hibernate 3.2...

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

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

    Hibernate开发指南

    - 高级特性: Criteria API、Hibernate检索策略、事件监听器、拦截器 - 性能调优和最佳实践 - 实战案例分析 通过阅读这些资料,你将能够掌握Hibernate的基本操作和进阶技巧,从而高效地进行Java ORM开发。在实践...

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

    3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...

    Hibernate学习总结

    学习成长路,Hibernate总结: 1.Hibernate入门优缺点、 2.Hibernate的操作CRUD、 3.主键生成机制、 4.持久化对象的状态、 ...8.Hibernate检索策略(fetch抓取策略)、 9.二级缓存、 10.Hbernate的检索方式(HQL语句)

    Hibernate检索方式

    ### Hibernate检索方式详解 #### 一、概述 Hibernate是一个强大的对象关系映射(ORM)框架,它可以将Java对象与数据库表进行映射,使得开发者能够更方便地进行数据的持久化操作。在Hibernate中,提供了多种检索...

    hibernate基础 注解开发 检索

    ### Hibernate基础:注解开发与检索 #### 一、Hibernate注解开发概述 **Hibernate**是一种流行的Java持久层框架,提供了对象关系映射(ORM)的功能,使得Java开发者能够更高效地进行数据库操作。注解作为Java SE 5...

    hibernate3数据检索、抓取策略 、 注解的使用

    hibernate3数据检索、抓取策略 、 注解的使用

    J2EE Hibernate-6.ppt

    《J2EE Hibernate-6.ppt》探讨了Hibernate在J2EE环境中的检索策略,主要涉及立即检索策略、延迟检索策略以及迫切左外连接检索策略。 1. **立即检索策略**: 立即检索策略是Hibernate默认的检索方式。在处理一对多...

    JAVA软件工程课程体系

    Hibernate3对象关系映射、操纵持久化对象、Hibernate相关映射、Hibernate检索策略、Hibernate检索方式、Hibernate高级配置、Java语言的反射机制、iBATIS原理及使用;Spring2概述、bean和BeanFactory等。 通过上述...

    Hibernate实战笔记

    - **Hibernate中的n+1查询问题**:当使用默认的立即检索策略时,Hibernate会在检索一个对象的同时检索其关联的所有对象。例如,在一个`Customer`与多个`Order`的关联关系中,如果数据库中有`n`个客户,则Hibernate将...

Global site tag (gtag.js) - Google Analytics