转载自:http://ranji13-163-com.iteye.com/blog/857794
浅谈Hibernate中的几个查询
一、load和get
相信大家对这两个方法已经非常熟悉了,都是根据数据索引来查找对象,这里针对其区别来从各方面比较一下:
1、load方面在查询时,先从一级缓存中寻找与数据索引对应的实体对象,然后构建并返回一个代理对象,当我们真正使用这个代理对象的时候,这时候才会进入二级缓存查找或到数据库加载数据,如果数据库中没有找到则抛出一个ObjectNotFoundException;
2、get方法在查询时,同样是先从一级缓存中寻找与数据索引对应的实体对象,如果有则直接返回该实体对象,如果没有则马上进入二级缓存查找或到数据库加载数据,查找到则直接返回查询对象,没有则返回一个null;
二、list和iterator
1 、list方法会直接避开一二级缓存直接到数据库中加载数据,然后将查询结果放入缓存中,当然如果你配置了查询缓存,他会先进入查询缓存寻找,如果没有满足条件的再进入数据库加载数据;
2、iterator方法在查询时是先从数据库中查询出所有满足条件的数据索引,然后再根据这些数据索引进入一级和二级缓存进行匹配,如果对于数据索引有实体对象则直接返回该对象,如果没有则在具体使用对象的时候才会进入数据库加载数据,并且把数据索引和对于实体对象放进缓存;
三、延迟加载
1、对于load方法,它在查询对象的时候始终返回的一个代理对象,那么为什么hibernate要引入这么一个方式呢,为什么不像get方法一样直接返回查询对象呢?出于对hibernate的性能考虑,hibernate则提出了一个解决方案,那就是延迟加载,这里load方法的使用则正是实体对象延迟加载的表现。
2、对于iterator方法,为什么它每次查询对要先将所有满足条件的数据索引查询出来,而不是像list一样直接返回满足条件的结果集?和load方法一样,这样做也是为了解决hibernate的性能问题,当只有具体使用时才会根据数据索引进入数据库加载数据。这里有个问题,当进入数据库加载数据后会将所有满足条件的数据索引和实体对象放进缓存中,但是如果数据有100W条呢?这时候会出现outOfMerroyError,一种解决方案是在一边查询数据时一边session.evict()或sessionFactory.evict();来销毁缓存中的对象。实际应用中对于这种问题还是建议大家使用JDBC来处理。
相关推荐
根据提供的标题“深入浅出 Hibernate.pdf”以及描述“深入浅出 Hibernate.pdf”,我们可以推断这份文档主要讲解了Hibernate框架的相关知识。接下来,我们将基于这些信息展开详细的解释与知识点的梳理。 ### ...
在Java编程中,`java.lang.NoClassDefFoundError` 是一个常见的运行时异常,它发生在类加载器尝试加载一个在编译时存在但在运行时找不到的类定义时。这个错误通常意味着类路径设置不正确或者依赖项没有正确地被包含...
### 关于《Beginning Hibernate: For Hibernate 5》的知识点总结 #### Hibernate 5 概述 - **定义**: Hibernate 是一款流行的开源对象关系映射(ORM)框架,它简化了数据库与 Java 对象之间的交互过程。 - **版本**...
如何整合这4个开源框架进行J2EE开发,如何基于MyEclipseIDE进行开发,J2EE开发的基础和基础环境搭配,Struts、Hibernate、Spring、Eclipse四个框架的使用,如何整合Struts+Hibernate+Spring+Eclipse框架。...
在 Java web 开发中, Hibernate 是一个非常流行的 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到关系数据库中。然而,在使用 Hibernate 进行数据库操作时,经常会遇到 "No Hibernate Session ...
下面将从几个关键知识点来探讨Hibernate的核心概念和技术。 1. **对象关系映射(ORM)**:ORM是Hibernate的核心特性,它将Java类与数据库表进行映射,通过对象的增删改查操作实现对数据库的数据操作。ORM消除了低级...
深入浅出Hibernate.PDF"这个文档中,读者可以找到以下关键知识点: 1. Hibernate概述:讲解Hibernate的起源、发展和核心功能,以及它在Java EE中的地位。 2. 安装与配置:如何在项目中引入Hibernate,配置...
如果只需要查询结果中的一个或几个字段,可以像下面这样处理: ```java for (int i = 0; i (); i++) { Object[] o = (Object[]) list.get(i); System.out.println(o[0]); // 输出第一个字段的值 System.out....
深入浅出hibernate 清晰版
在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...
尽管提供的“部分内容”并未直接涉及Hibernate的具体内容,但基于标题与描述中提到的“深入浅出Hibernate”,我们可以围绕Hibernate这一主题进行展开。 ### Hibernate简介 Hibernate是一个开源的对象关系映射...
2. 安装与配置:介绍如何在项目中集成Hibernate,包括下载、安装、配置过程,以及如何创建第一个Hibernate应用。 3. 实体类和映射文件:这是Hibernate的核心部分,书中会讲解如何定义Java实体类,以及如何通过XML或...
Hibernate的级联操作允许在一个对象的操作中自动处理相关对象,如CascadeType.ALL表示所有操作都会影响关联对象。加载策略包括懒加载(Lazy Loading)和急加载(Eager Loading),用于控制关联对象何时从数据库中...
《深入浅出Hibernate》是夏昕撰写的一本...通过阅读《深入浅出Hibernate》,读者不仅可以掌握Hibernate的基本用法,还能了解到其背后的机制,从而更好地利用这个强大的框架,提高Java应用程序的开发效率和可维护性。
《深入浅出Hibernate》是由夏昕编著的一本关于Hibernate框架的专业书籍,旨在帮助读者全面理解和掌握Hibernate这一Java领域中的主流持久化框架。Hibernate作为对象关系映射(ORM)工具,能够将Java对象与数据库表...
这个标题指出我们要讨论的是Hibernate框架在处理查询和数据库并发事务方面的内容。Hibernate是一个流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的方式操作数据库,而无需过多关注底层SQL语言。在第...
官网hibernate:问题说明: 1、安装整合通过; 2、整合时注意javassist-3.22.0-GA.jar与struts2.4的 javassist-3.20.0-GA.jar重复; 3、整合所需基础包以及整合需要的外部包,自己放到一个新建文件夹中,方便大家...
(假若您希望使用其它用户名如root,您需要修改hibernate的数据库配置中的连接参数——位于hibernate.cfg.xml中,以及创建数据库表时的连接参数——位于build.xml中。) 7, 确认ant安装正确. ant可以在此下载: ...
《深入浅出Hibernate》这本书是Java开发者们学习ORM(对象关系映射)框架的重要参考资料,主要聚焦于Hibernate这一流行的开源框架。Hibernate作为一种强大的工具,它能够帮助开发人员将数据库操作与业务逻辑解耦,...